首页 > 解决方案 > 协变(输出)和泛型类型 kotlin

问题描述

在 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 中使用相同的代码?谢谢

标签: genericsinheritanceinterfacekotlincovariant

解决方案


推荐阅读