java - 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());
}
解决方案
超类引用可以持有子类的对象。
为了更好地理解,请考虑您没有使用泛型。
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
}