如何将List << MyClass>转换为List <T>?

我试图从泛型方法返回一个特定的列表

代码如下:

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 

如何正确返回列表?

编译器不能在你的例子中找出类型List<T>List<Animal>之间的关系,所以你应该用as运算符进行一个未经检查的转换。 另外请注意,您正在使用is运算符 ,您可能打算使用简单的相等性检查:

 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")