我尝试从泛型方法
返回特定列表 代码如下:val list: List<Animal> = listOf(Animal(1), Animal(2), Animal(7))
val storage = object : Storage {
override fun <T> fetch(clazz: Class<T>): List<T> {
if(clazz is Animal::class.java){
return list
}
throw RuntimeException()
}
}
但我有一个例外:
Error:(14, 20) Kotlin: Type mismatch: inferred type is kotlin.collections.List<polar.QueryTest.Animal> but kotlin.collections.List<T> was expected
如何正确返回列表?
答案 0 :(得分:6)
编译器无法确定示例中类型List<T>
和List<Animal>
之间的关系,因此您应该使用as
operator进行未经检查的强制转换。另请注意,您正在使用is
operator,您可能需要使用简单的相等检查:
val list: List<Animal> = listOf(Animal(1), Animal(2), Animal(7))
val storage = object : Storage {
fun <T> fetch(clazz: Class<T>): List<T> {
if (clazz == Animal::class.java) {
return list as List<T>
}
throw RuntimeException()
}
}
如果未经检查的投射警告会扰乱您,您可以使用以下注释对其进行抑制:@Suppress("UNCHECKED_CAST")