java不会为泛型语句返回错误

whhtz7ly  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(348)

你好,试着找答案c1班是延b1班是延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());

    }
qc6wkl3g

qc6wkl3g1#

超类引用可以容纳子类的对象。
为了更好地理解,请考虑您没有使用泛型。

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());
}

你应该同意以上代码的有效性。就像我们创建超类的集合一样,我们将被允许向其中添加任何子类对象。
泛型也在发生同样的事情。当您在下面声明:

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());
}

我的数组实际上是超类型的。所以你可以添加那个超类的任何子类。
然后一个问题出现在你身上,那么泛型有什么用呢?这有什么用 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
}

相关问题