首页 > 解决方案 > java 不返回 Generic 语句的错误

问题描述

你好试图找到答案 c1 类扩展 b1 b1 类扩展 a1 a1 是超类

这段代码不会出错。代码有什么问题?

public static void append1(Collection<? super a1> my_array, int n) {
       
            my_array.add(new c1());
            my_array.add(new b1());
            my_array.add(new a1());
           
            
    }

标签: javaclassgenericssuperextend

解决方案


超类引用可以持有子类的对象。

为了更好地理解,请考虑您没有使用泛型。

public static void append1(Collection<a1> my_array, int n) {
       
    my_array.add(new c1());
    my_array.add(new b1());
    my_array.add(new a1());
}

您应该同意以上代码的有效性。就像我们创建 SuperClass 的集合一样,我们将被允许向其中添加任何子类对象。

泛型在这里也发生了同样的事情。当您在下面声明时:

public static void append1(Collection<? super a1> my_array, int n) {
       
    my_array.add(new c1());
    my_array.add(new b1());
    my_array.add(new a1());
}

my_array 实际上是超类型。因此,您可以添加该超类的任何孩子。

那么问题来了,那泛型有什么用呢?那里有什么用super?因此,要回答这个问题,当您将从其他方法调用该方法时将使用 is。在那里,您将能够仅将超级列表传递给 a1。下面会给你错误。

public static void main(final String[] args) {
    append1(new ArrayList<b1>()); // compilation error as b1 is not super to a1
    append1(new ArrayList<c1>()); // compilation error as c1 is not super to a1
}

推荐阅读