我正在按照
Java中的泛型定义这个静态方法的教程:
public static <T extends Comparable<T>> T min(T a) { ... }
并说
min(new GregorianCalendar());
无法编译因为GregorianCalendar扩展日历和日历实现了Comparable< Calendar>所以它暗示GregorianCalendar实现了Comparable< Calendar>和NOT Comparable< GregorianCalendar>.
所以为了编译签名必须改成:
public static <T extends Comparable<? super T>> T min(T a) { ... }
这完全可以理解.该方法的第一个版本有效地不能在java-5中编译,但它在java-8中编译! (我试过5到8)
为什么java-8现在允许? (因为它现在让它更加混乱).那背后的新“规则”是什么?