gpt4 book ai didi

java - 隐式类型和通配符

转载 作者:搜寻专家 更新时间:2023-11-01 03:24:13 24 4
gpt4 key购买 nike

this topic我遇到了隐式类型。

问题 1.Java 中对隐式类型的定义是什么,或者它是非形式化的概念?我可以手动定义隐式类型吗?所有的隐式类型都是一样的吗?编译器的隐式类型是什么?

以下代码示例:

List<? extends Number> nums= new ArrayList<Integer>();
nums.add(3);//error

我知道我们可以分配给 nums引用ArrayList<Double> .

问题 2. 在这种情况下 ? extends Number是隐式类型,由 CAP#1 定义.编译器确实只知道 null 是真的吗?是这个隐式类型的实例吗?

最佳答案

正确的说法是捕获通配符。编译器在内部将泛型类型的通配符实例化转换为通配符捕获。捕获表示类型参数的特定未知类型。当然,这个特定的未知类型是通配符表示的类型家族的成员。

请注意,由于通配符实例化可以表示许多不同的类型,因此我们说通配符表示参数化类型的一系列不同实例化。

Can i define implicit type manually?

匿名类型变量?不,那是由编译器在内部创建的。你可以这样说,你是在指示编译器创建一个匿名类型参数,它将替换所使用的通配符。

Is it true that all of implicit type is the same?

没有。如果你说 List<? extends Number>两次不同的类型,它们都将生成不同的匿名类型,即 CAP#1 extends NumberCAP#2 extends Number .

What's the implicit type for compiler?

我不明白这些问题。

Is it true that compiler does know that only null is instance of this implicit type?

添加null的原因之所以有效是因为,null是任何类型引用的有效值。因此,无论通配符代表的实际类型参数是什么,都会很乐意接受值 null .

关于java - 隐式类型和通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19317697/

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