Ковариант (выход) и общий тип котлин
В Java я могу сделать это:
interface BaseInterface {}
interface ExtendsInterface extends BaseInterface {}
public interface ProblemInterface<E extends BaseInterface> {
void method(E baseInterface);
}
class Main {
public static void main (String [ ] args) {
ProblemInterface<ExtendsInterface> problemInterfaceExtendsInterface = new ProblemInterface<ExtendsInterface>() {
@Override
public void method(ExtendsInterface baseInterface) {}
};
ProblemInterface<? extends BaseInterface> problemInterfaceBaseInterface = problemInterfaceExtendsInterface;
}
}
В Котлине:
interface BaseInterface
interface ExtendsInterface: BaseInterface
interface ProblemInterface<out E : BaseInterface> {
fun method(baseInterface: E)
}
val problemInterfaceExtendsInterface: ProblemInterface<ExtendsInterface> = object : ProblemInterface<ExtendsInterface> {
override fun method(baseInterface: ExtendsInterface) {}
}
val problemInterfaceBaseInterface: ProblemInterface<BaseInterface> = problemInterfaceExtendsInterface
Но проблема в следующем: использование ковариант (вне), но параметр типа происходит в позиции "в"
Есть идеи, чтобы решить это? Как я могу сделать, чтобы работает тот же код в Java/Kotlin? Спасибо