Java generics ต้องการ <เมื่อใด ขยาย T> แทน <T> และมีข้อเสียของการสลับ?
รับตัวอย่างต่อไปนี้ (ใช้ JUnit กับ Hamcrest matchers): Map<String, Class<? extends Serializable>> expected = null; Map<String, Class<java.util.Date>> result = null; assertThat(result, is(expected)); สิ่งนี้ไม่ได้คอมไพล์ด้วยassertThatลายเซ็นเมธอดJUnit ของ: public static <T> void assertThat(T actual, Matcher<T> matcher) ข้อความแสดงข้อผิดพลาดของคอมไพเลอร์คือ: Error:Error:line (102)cannot find symbol method assertThat(java.util.Map<java.lang.String,java.lang.Class<java.util.Date>>, org.hamcrest.Matcher<java.util.Map<java.lang.String,java.lang.Class <? extends java.io.Serializable>>>) อย่างไรก็ตามถ้าฉันเปลี่ยนassertThatลายเซ็นวิธีเป็น: public static <T> void assertThat(T result, Matcher<? extends …