java - JLS8。通用类声明定义

标签 java generics jls

抱歉,如果我的问题不是新问题,但我找不到它。

现在我正在阅读 jls8,但我无法理解其中的一个定义。在章节8.1.5 Superinterfaces 我遇到了这个

给定一个泛型类声明 C<F1,...,Fn> (n > 0),直接 super 接口(interface) 参数化类类型C<T1,...,Tn> ,其中 Ti (1 ≤ i ≤ n) 是一种类型,是所有类型 I<U1 θ,...,Uk θ> ,其中I<U1,...,Uk>C<F1,...,Fn> 的直接 super 接口(interface)θ 是 替换 [F1:=T1,...,Fn:=Tn]。

如果我理解正确,这个定义意味着我可以分配 List<String> = ArrayList<String>但不是例如List<String> = ArrayList<Integer> .但我不确定。有人可以用更多细节和示例来解释这一点吗? 提前致谢。

最佳答案

您引用的声明是关于 super 接口(interface)的声明,而不是关于您可以将什么分配给什么的声明。

List<String>的背景下,和ArrayList<String> ,声明说 List<String>ArrayList<String> 的直接 super 接口(interface)。它没有说明您是否可以将一个分配给另一个。

该规范指定是否可以为 5.2 节中的变量赋值。其中,它表示扩大引用转换,这在 5.1.5 节中进一步指定。 , 被允许。我们看到从 S 开始允许扩大转换。至T如果ST 的子类型.

来自4.10部分,我们可以看到很多关于子类型的规则。最终你会发现一堆规则,当它们一起应用时,意味着 TS 的直接 super 接口(interface),然后ST 的子类型.

关于java - JLS8。通用类声明定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57123455/

相关文章:

java - 如何在运行时将组件添加到使用 Netbeans 可视化编辑器创建的 Swing UI?

java - 当正在访问的属性或方法暂时不可用时抛出什么异常?

java - 我如何测量 Java 中耗时?

java - 嵌套 Groovy 泛型 : unexpected token on inner generic type

Java 函数从 C++ 代码 Eclipse jni 获取结果

java - 了解集合中的 Java 绑定(bind)泛型类型

java - 接口(interface)、参数化类型和集合

java - 接口(interface)隐式声明 Object 类的公共(public)方法?

java - Java 静态初始化 block 上的奇怪代码