swe*_*aro 7 generics typechecking bounded-types java-8 bounded-wildcard
我正在关注定义这个静态方法的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 Calendar并Calendar 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现在允许?(因为它现在让它更加混乱).那背后的新"规则"是什么?
类型推断!
\n\nJLS \xc2\xa718中有大量与此相关的信息。具体来说,我将引导您访问JLS \xc2\xa718.2(第 678 页),其中指出:
\n\n\n\n在你的情况下,让S = GregorianCalendar和T = Calendar。该页面指出(在归约过程中)如果S是 的子类型T,则被S视为属于 类型T(GregorianCalendar被视为Calendar)。
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |