在Kotlin中我发现,与Java相比,使用covariance可以完成以下操作:
ArrayList<Dog> listOfDogs = listOf(dog1, dog2)
ArrayList<Animal> animalList = listOfDogs // No compiler error
在我的情况下,我有一个接口消息:
public interface Message {
RawMessage toRawMessage();
}
例如,我有一个Int32
消息:
public interface Int32 extends Message {
// abstract methods
}
现在我有一个带有type
类型的参数Class<Message>
的方法:
fun doSomethingWithType(type: Class<Message>) {
// Implementation
}
问题是我试图传递一个从Message扩展的Java类,如:
doSomethingWithType(Int32::class.java)
但这给了我以下编译器错误:
Expected type mismatch:
required: Class<Message>
found: Class<Int32>
为什么这不起作用,我该如何解决?