java - 在 Java 中强制返回类型缩小?

标签 java inheritance covariance narrowing

在 Java 中覆盖方法可以缩小返回类型。

但是否有可能在申报期间强制缩小范围?

例如,这在模式中可能很好,其中内部类与外部类同时被子类化:

public class Try_ForceNarrow {

    public interface IMember {

    }

    public interface Container<M extends IMember> {
        M createMember();
    }

    public static class A implements Container<A.Member> {

        @Override
        public Member createMember() {
            return new Member();
        }

        public class Member implements IMember {
        }
    }

    public static class B extends A implements Container<B.Member> {

        @Override
        public Member createMember() {
            return new Member();
        }

        public class Member extends A.Member {

        }

    }

    public static void main(String[] args) {

    }

}

此代码编译失败,出现错误“接口(interface)容器不能用不同的参数实现多次”。

如何避免这种情况?

当然可以写

public static class B extends A  {

        @Override
        public Member createMember() {
            return new Member();
        }

        public class Member extends A.Member {

        }

    }

但这样我就可以忘记覆盖 createMember() 并违反模式。

最佳答案

A<T> implements Container<T>呢? ?您可以根据需要进一步限制 T...

关于java - 在 Java 中强制返回类型缩小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27989729/

相关文章:

Java循环算法

java - 继承类中的多个方法

c# - Autofac:在一个组合后面隐藏多个逆变实现

c# - 双协方差

python - 计算 torch 张量的协方差(2d 特征图)

java.lang.NullPointerException | java.lang.NullPointerException尝试从另一个类数组获取值

java - 将 ObservableList 中的修改合并到原始集合

java - 在HashTable中查找Key的方法

c# - Cast 接口(interface)和类对象

python - 如何在继承树中多次包装子方法?