【问题标题】:java does not return an error for Generic statementjava 不返回 Generic 语句的错误
【发布时间】:2021-03-01 09:35:36
【问题描述】:

你好试图找到答案 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());
           
            
    }

【问题讨论】:

  • 为什么会出现错误?

标签: java class generics super extend


【解决方案1】:

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

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

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
}

【讨论】:

  • 谢谢notescrew,很好的解释!
  • @yka 如果有帮助,请考虑接受答案。所以其他有同样问题的人可以认为这是正确的答案。
猜你喜欢
  • 2011-11-01
  • 2015-08-23
  • 2016-07-31
  • 1970-01-01
  • 2013-09-18
  • 1970-01-01
  • 1970-01-01
  • 2014-08-20
  • 2015-04-13
相关资源
最近更新 更多