首页 > 解决方案 > 在子类中使用泛型时发生奇怪的编译错误

问题描述

下面是一个代码示例,它会导致编译错误。

    class A<T extends Number> {
        T a;

        T getA() {
            return a;
        }
    }

    class B<U> extends A<Integer> {
        public void test() {
            Integer i = getA();//fine
            B b = new B();
            Integer i1 = b.getA(); //Ooop !! has an error!!!
            Number i2=b.getA(); //fine
        }
    }

如果我删除<U>通用符号或使用B<?> b = new B();,那么它编译得很好。上面的代码是否违反了任何 java 规范。

标签: javagenericslanguage-lawyer

解决方案


推荐阅读