Generics 类型不匹配:推断的类型为V?但是收藏<;什么都没有>;预料之中 fun-someMethod(v:Any){ val fieldValue=get(Any()) 如果(fieldValue!=null&&fieldValue为可变集合&&v为集合){ fieldValue.addAll(v) } } 乐趣获取(对象:任何):任何?{ 待办事项() }
上述代码返回以下错误: 错误:(115,39)Kotlin:类型不匹配:推断的类型是V?但是 人们期待着收集。投影类型可变集合 限制使用公共摘要fun addAll(元素:集合): kotlin.collections.MutableCollection中定义的布尔值Generics 类型不匹配:推断的类型为V?但是收藏<;什么都没有>;预料之中 fun-someMethod(v:Any){ val fieldValue=get(Any()) 如果(fieldValue!=null&&fieldValue为可变集合&&v为集合){ fieldValue.addAll(v) } } 乐趣获取(对象:任何):任何?{ 待办事项() },generics,kotlin,Generics,Kotlin,上述代码返回以下错误: 错误:(115,39)Kotlin:类型不匹配:推断的类型是V?但是 人们期待着收集。投影类型可变集合 限制使用公共摘要fun addAll(元素:集合): kotlin.collections.MutableCollection中定义的布尔值 有办法解决这个问题吗?这是不变类型T的恒星投影的预期行为,如MutableCollection。从: 对于Foo,其中T是具有上限TUpper的不变类型参数,Foo相当于读取值的Foo和写入值的Foo 为什么会这样? 在Java中
有办法解决这个问题吗?这是不变类型
T
的恒星投影的预期行为,如MutableCollection
。从:
对于Foo,其中T是具有上限TUpper的不变类型参数,Foo相当于读取值的Foo和写入值的Foo
为什么会这样?
在Java中,当您有一个
列表时
始终可以插入null
,因为所有类型都可以为null,但在Kotlin中情况并非如此,这就是为什么您不能向可变列表
添加任何内容。类似地,从Java列表中提取的任何内容都将始终是对象的子类型(因为每个非原语类型都扩展了对象
)。在Kotlin中,您知道从MutableList
中提取的任何内容都将始终是TUpper
的子类型(或者Any?
,如果您不指定上限,因为这是可用的最“通用”类型) 这是具有不变类型T
的恒星投影的预期行为,如MutableCollection
。从:
对于Foo,其中T是具有上限TUpper的不变类型参数,Foo相当于读取值的Foo和写入值的Foo
为什么会这样?
在Java中,当您有一个列表时
始终可以插入null
,因为所有类型都可以为null,但在Kotlin中情况并非如此,这就是为什么您不能向可变列表
添加任何内容。类似地,从Java列表中提取的任何内容都将始终是对象的子类型(因为每个非原语类型都扩展了对象
)。在Kotlin中,您知道从MutableList
中提取的任何内容都将始终是TUpper
的子类型(或者Any?
,如果您不指定上限,因为这是可用的最“通用”类型)
fun someMethod(v: Any) {
val fieldValue = get(Any())
if (fieldValue != null && fieldValue is MutableCollection<*> && v is Collection<*>) {
fieldValue.addAll(v)
}
}
fun get(obj: Any): Any? {
TODO()
}