Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java通配符类型与Kotlin星投影_Java_Generics_Kotlin_Wildcard - Fatal编程技术网

Java通配符类型与Kotlin星投影

Java通配符类型与Kotlin星投影,java,generics,kotlin,wildcard,Java,Generics,Kotlin,Wildcard,我正在阅读一篇关于Java和kotlin之间差异的kotlin文档 . 据说,Kotlin没有通配符类型。然而,在仔细阅读了泛型文档之后,我发现了关于 老实说,我看不出有什么区别。有人能解释一下这是怎么回事吗 List<?> list; 列表; 与此不同 lateinit var list: MutableList<*> lateinit变量列表:可变列表 这可能意味着Kotlin的通配符与Java中的通配符形式不同。相反,Kotlin使用了一个不同的概念,它添加

我正在阅读一篇关于Java和kotlin之间差异的kotlin文档 . 据说,Kotlin没有通配符类型。然而,在仔细阅读了泛型文档之后,我发现了关于 老实说,我看不出有什么区别。有人能解释一下这是怎么回事吗

List<?> list;
列表;
与此不同

lateinit var list: MutableList<*> 
lateinit变量列表:可变列表

这可能意味着Kotlin的通配符与Java中的通配符形式不同。相反,Kotlin使用了一个不同的概念,它添加了一个选项来指定声明站点的差异,这是Java通配符无法做到的

至于星投影,它实际上几乎相当于一个无界Java通配符。然而,至少有一个与Kotlin类型系统相关的差异

当您有一个
列表时,Java不知道该类型,但所有Java引用类型都可以为null,因此您可以安全地将
null
作为未知类型的参数传递,例如
List.add(null)

在Kotlin中,这是不正确的,星形投影
MutableList
out Any?
In Nothing
投影组合在一起,后者意味着您根本无法向类型未知的方法传递任何内容(
Nothing
是没有值的类型)

out投影也是如此:虽然可以将
null
作为Java绑定的通配符类型
传递?扩展T
,您不能对Kotlin
out T
投影执行相同的操作

Java无界通配符的确切等价物是
,因为它允许您将
null
作为未知类型的参数传递(
Nothing?
is
Nothing
∪ {
null
},这是只有
null
值的类型)