gpt4 book ai didi

java - JLS8。通用类声明定义

转载 作者:行者123 更新时间:2023-11-30 01:48:11 26 4
gpt4 key购买 nike

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

现在我正在阅读 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/

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