В 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
}
Проблема в том, что я пытаюсь передать Java-класс, расширяющийся из Message, например:
doSomethingWithType(Int32::class.java)
Но это дает мне следующую ошибку компилятора:
Expected type mismatch:
required: Class<Message>
found: Class<Int32>
Почему это не работаети как мне это решить?