pok*_*zok 8 java generics wildcard kotlin
我正在阅读有关Java和Kotlin之间差异的kotlin文档,请访问 https://kotlinlang.org/docs/reference/comparison-to-java.html.据说那里Kotlin没有通配符类型.然而,在仔细阅读了仿制药的文档后,我发现了关于 星形投影的信息,老实说,我看不出差异.有人可以向我解释这是怎么回事
List<?> list;
Run Code Online (Sandbox Code Playgroud)
与此不同
lateinit var list: MutableList<*>
Run Code Online (Sandbox Code Playgroud)
hot*_*key 13
可能这意味着Kotlin没有与Java中存在的相同形式的通配符.相反,Kotlin使用不同的混合站点方差概念,它添加了一个选项来指定声明站点的方差,这是Java通配符无法做到的.
至于星形投影,它实际上几乎相当于一个无界的Java通配符.但是,至少有一个与Kotlin类型系统有关的差异.
当你有一个List<?>,类型是未知到Java,但所有的Java引用类型都是空的,因此你可以安全地传递null作为未知类型的参数,如list.add(null).
在Kotlin中,不是真的,星形投影MutableList<*>结合了两者out Any?和in Nothing投影,后者意味着你根本无法将任何东西传递给类型未知的方法(Nothing是没有价值的类型).
对于out-projection也可以这样说:虽然你可以传递null一个Java有界通配符类型? extends T,但你不能对Kotlin out T投影做同样的事情.
和Java无界通配符的完全等效的<in Nothing?>,因为它可以让你传递一个null作为未知类型的参数(Nothing?是Nothing∪{ null},这是一个只具有类型null值).
| 归档时间: |
|
| 查看次数: |
2010 次 |
| 最近记录: |