gpt4 book ai didi

generics - java-8 中有界通配符的规则改变?

转载 作者:行者123 更新时间:2023-12-02 21:45:20 26 4
gpt4 key购买 nike

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

public static <T extends Comparable<T>> T min(T a) { ... }

并这么说

min(new GregorianCalendar());

无法编译,因为 GregorianCalendar extends CalendarCalendar implements Comparable<Calendar>所以这意味着 GregorianCalendar implements Comparable<Calendar>而不是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 页)其中指出:

enter image description here

在您的情况下,让S = GregorianCalendarT = Calendar。此页面指出(在归约过程中)如果 ST 的子类型,则 S 被视为 类型>T(GregorianCalendar 被视为日历)。

关于generics - java-8 中有界通配符的规则改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48716271/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com