泛型 – java-8中有界通配符中的规则变化?
发布时间:2020-12-15 00:44:47 所属栏目:Java 来源:网络整理
导读:我正在按照 Java中的泛型定义这个静态方法的教程: public static T extends ComparableT T min(T a) { ... } 并说 min(new GregorianCalendar()); 无法编译因为GregorianCalendar扩展日历和日历实现了Comparable Calendar所以它暗示GregorianCalendar实现了
我正在按照
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现在允许? (因为它现在让它更加混乱).那背后的新“规则”是什么? 解决方法
类型推断!
在JLS §18中有大量关于此的信息.具体来说,我将指导您到JLS §18.2(第678页),其中指出: 在你的情况下,让S = GregorianCalendar和T = Calendar.该页面说明(在缩小过程中)如果S是T的子类型,则S被认为是T类型(GregorianCalendar被视为日历). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |