Java类定义的类型推断失败。我怎么解决这个问题?

问题描述 投票:1回答:1

在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>

为什么这不起作用,我该如何解决?

java kotlin abstract-class covariance
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.