作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图从泛型方法返回一个特定的列表
代码如下:
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()
}
}
但我有一个异常(exception):
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
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()
}
}
如果 unchecked cast 警告打扰到您,您可以使用以下注释抑制它:@Suppress("UNCHECKED_CAST")
关于kotlin - 如何将 List<<MyClass> 转换为 List<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35799902/
我是一名优秀的程序员,十分优秀!