Mak*_*akc 3 generics nullable kotlin
我不明白为什么这段代码不起作用
class nullableGenericA<T: Any?>{
fun someMethod(v: T){}
fun someMethod(){
someMethod(null)
}
}
Run Code Online (Sandbox Code Playgroud)
错误:“Null 不能是非空类型 T 的值”。怎么运行的?如果可为空不是类型的一部分,为什么会这样
class NullableGenericB<T>(val list: ArrayList<T>){
fun add(obj: T){
list.add(obj)
}
}
fun testNullableGenericB(){
NullableGenericB<String?>(ArrayList()).add(null)
}
Run Code Online (Sandbox Code Playgroud)
您的泛型类型不一定可以为空。它只有允许可为空的上限,但不限制为可为空。由于T可能不可为空,因此传递null为是不安全的T。例如,某人可以使用不可为 null 的类型创建类的实例:
val nonNullableA = NullableGenericA<String>()
Run Code Online (Sandbox Code Playgroud)
如果您想将其设计为始终可以对泛型类型使用可空值,那么您应该在T?可以接受的使用场所使用它。然后,即使不可为空,也会在函数站点使用T可空版本。T
class NullableGenericA<T>{
fun someMethod(v: T?) {}
fun someMethod() {
someMethod(null)
}
fun somethingThatReturnsNullableT(): T? {
return null
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
56 次 |
| 最近记录: |