java - 隐式类型和通配符

标签 java wildcard implicit

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/

相关文章:

java - 搜索通配符 ('<' , '>' ), 计数并得到在java中的位置

PHP - 无法连接到 FTP - 隐式 SSL 端口 990

java - 编写用于计算算术表达式的 Java 类

java - Android SQLiteException 语法错误

sql - 在 SQL Where 语句中使用通配符

java - java.util.Arrays.copyOf(U[], int, Class<? extends T[]>) 中通用通配符的优点

java - ListView setAdapter() 空指针异常(使用 Inflator)

java - Spring Integration - 服务器重新启动后默认重新处理来自入站文件适配器的消息

c# - 隐式转换为 Func

scala - 为什么asInstanceOf不发起隐式转换?