出于某种原因,Kotlin将以下表达式评估为List
Any
而不是Animal
,我该如何实现?
interface Animal
enum class Dog:Animal{
WHITE;
}
enum class Cat:Animal{
BLACK;
}
.............
fun loadAnimals(names:List<String>):List<???>{
return names.map{
when (/*some cond*/) {
true -> Cat.Black
else -> Dog.White
}
}
}
答案 0 :(得分:1)
编译器如何推断它是Animal的列表?如果Dog
还实现了Canine
接口,该怎么办?如果Cat和Dog都实现了Carnivore
接口怎么办?
如果您想返回Animal
的列表,则需要在这种情况下转换返回值。
fun loadAnimals(names: List<String>): List<Animal> {
return names.map {
when (/*some cond*/) {
true -> Cat.Black as Animal
else -> Dog.White as Animal
}
}
}
或者像这样,没有演员:
fun loadAnimals(names: List<String>): List<Animal> {
return names.map<String, Animal> {
when (/*some cond*/) {
true -> Cat.BLACK
else -> Dog.WHITE
}
}
}