Java JLS:第5.2节转让转换(转换链)

Java JLS:第5.2节转让转换(转换链),java,jls,Java,Jls,我试图理解JLS中的示例 : 如果转换链包含两个不在子类型关系中的参数化类型,则这是编译时错误。 这种非法连锁的一个例子是: Integer, Comparable<Integer>, Comparable, Comparable<String> 整数,可比,可比,可比 链的前三个元素通过加宽而相互关联 引用转换,而最后一个条目是从其 未经检查的转换。然而,这不是一个有效的解释 赋值转换,因为链包含两个参数化 类型,可比和可比,它们不是 亚型 在什么条件下我们才能得到

我试图理解JLS中的示例

:

如果转换链包含两个不在子类型关系中的参数化类型,则这是编译时错误。

这种非法连锁的一个例子是:

Integer, Comparable<Integer>, Comparable, Comparable<String>
整数,可比,可比,可比
链的前三个元素通过加宽而相互关联 引用转换,而最后一个条目是从其 未经检查的转换。然而,这不是一个有效的解释 赋值转换,因为链包含两个参数化 类型,
可比
可比
,它们不是 亚型


在什么条件下我们才能得到这条链子?有人能再举一些详细的例子吗?

我想我已经理解了

赋值上下文适用于赋值表达式

在表达中

Integer integerValue = 42;
Comparable<Integer> comparableInteger = integerValue;
通过扩大参考转换,可将
可比
类型的值分配给
可比
类型的变量

但你不能这样做

Comparable<String> comparableString = integerValue;
这将使用未经检查的转换(当您尝试调用
compareTo
时,可能会在运行时使用
ClassCastException
)。但是,在编译时没有问题,因为转换链是简单的

Comparable, Comparable<String>
可比的,可比的

这是允许的。

在任何条件下都无法获得。规范说,我们可能会得到编译时错误,所以我想看看Cаa使用此错误的代码。我想我误解了JLS。我也不知道这里的链子是什么意思。
Comparable raw = comparableInteger;
Comparable<String> parameterized = raw;
Comparable, Comparable<String>