2016-03-04 83 views
2

我试图从通用的方法如何投票列表<<MyClass>至列表<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 

如何正确地返回列表?

回答

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

相关问题