ฉันต้องการสร้างลายเซ็นของวิธีการใหม่โดยใช้การสะท้อนกลับใน Java 8 ฉันพบปัญหาบางอย่างเกี่ยวกับวิธีการทั่วไป โดยเฉพาะอย่างยิ่ง ฉันไม่พบสิ่งใดที่จะช่วยกู้คืนข้อมูลเกี่ยวกับกรณีของ "extends" หรือ "super" ในการประกาศประเภทเทมเพลต
ต่อไปนี้เป็นกรณีทดสอบเฉพาะ โดยอิงตามซอร์สโค้ดที่รู้จัก:
ลายเซ็นของวิธีการจากซอร์สโค้ด:public static <T extends AssertDelegateTarget> T assertThat(T assertion)
ก่อนอื่น มีวิธีที่สง่างามในการสร้างส่วน <T extends AssertDelegateTarget>
ใหม่โดยไม่ต้องแยกสตริงหรือไม่
นี่คือข้อมูลหลักที่ฉันสามารถรับได้จากการไตร่ตรอง:
method.toString()
:public static org.assertj.core.api.AssertDelegateTarget org.assertj.core.api.Assertions.assertThat(org.assertj.core.api.AssertDelegateTarget)
method.toGenericString()
:public static <T> T org.assertj.core.api.Assertions.assertThat(T)
เกิดอะไรขึ้นกับ "ขยาย AssertDelegateTarget"
method.getReturnType.toString()
:interface org.assertj.core.api.AssertDelegateTarget
method.getGenericParameterTypes()[0].getTypeName()
:T
ตามข้อมูลการสะท้อนข้างต้น ฉันสามารถถือว่าความสัมพันธ์ระหว่าง T และ AssertDelegateTarget แต่ฉันจะรู้ได้อย่างไรว่าเป็น "ขยาย" หรือ "ซุปเปอร์"