小编swe*_*aro的帖子

规则在java-8中的有界通配符中更改?

我正在关注定义这个静态方法的Java中的泛型教程:

public static <T extends Comparable<T>> T min(T a) { ... }
Run Code Online (Sandbox Code Playgroud)

并说

min(new GregorianCalendar());
Run Code Online (Sandbox Code Playgroud)

不能编译,因为GregorianCalendar extends CalendarCalendar implements Comparable<Calendar>因此暗示GregorianCalendar implements Comparable<Calendar>和NOT Comparable<GregorianCalendar>.所以为了编译签名必须改成:

public static <T extends Comparable<? super T>> T min(T a) { ... }
Run Code Online (Sandbox Code Playgroud)

这完全可以理解.该方法的第一个版本有效地无法在java-5中编译,但它在java-8中编译!(我试过5到8)

为什么java-8现在允许?(因为它现在让它更加混乱).那背后的新"规则"是什么?

generics typechecking bounded-types java-8 bounded-wildcard

7
推荐指数
1
解决办法
113
查看次数