У меня есть абстрактный класс Java с конкретным методом, который вызывает метод в подклассах:
abstract class JavaSuperclass<T> {
T doSomething() {
...
return doSomethingInSubclass();
}
abstract T doSomethingInSubclass();
}
У меня есть подкласс Java с его универсальным типом, установленным в List:
class JavaSubclass extends JavaSuperclass<List<WhateverJava>> {
List<WhateverJava> doSomethingInSubclass() {...}
}
И у меня есть подкласс Kotlin:
class KotlinSubclass : JavaSuperclass<List<WhateverKotlin>> {
override fun doSomethingInSubclass(): List<WhateverKotlin> {...}
}
(WhateverJava
- это класс Java, WhateverKotlin
- это класс данных Kotlin.)
Затем в классе Java я использую оба подкласса.
List<WhateverJava> listFromJava = javaSubclass.doSomething();
List<WhateverKotlin> listFromKotlin = kotlinSubclass.doSomething();
Строка, которая вызывает подкласс Java, компилируется нормально, но та, которая вызывает подкласс Kotlin, выдает эту ошибку:
error: incompatible types: List<capture<? extends WhateverKotlin>> cannot be converted to List<WhateverKotlin>