【问题标题】:Java Generics - Class a Subclass of itself?Java 泛型 - 类自身的子类?
【发布时间】:2016-03-30 05:54:06
【问题描述】:

我目前正在阅读 Java 泛型,但在通配符方面我有点卡住了。

我从 Collections 类中获得了这个方法:

public void <T> copy(List<? super T> dest, List<? extends T> src) {
    for(int i = 0; i < src.size(); i++) {
        dest.set(i, src.get(i));
     }
}

然后我被告知可以像这样调用该方法:

List<Object> objs = new ArrayList<Object>();
List<Integer> ints = new ArrayList<Integer>();
Collections.copy(objs, ints);

由于类型参数已经留给编译器来确定,书上说编译器选择类型参数为 Integer。

但这怎么可能呢?

如果它被认为是整数,这意味着在方法声明中 -
List&lt;? extends T&gt; 将转换为 List&lt;Integer extends Integer&gt;。

这是一个错误,还是在关于泛型时有不同的规则?我用谷歌搜索,大多数结果都说一个类不能是它自己的子类。

【问题讨论】:

  • Nizet 的回答当然是正确的,如果您只是错过了他解释的要点,那么一切都很好。但是,泛型很快就会变得非常混乱,如果您觉得需要对这个特定案例进行更广泛的解释,我可以尝试给出一个。

标签: java list generics collections wildcard


【解决方案1】:

不,这不是错误。

? extends Integer 表示:任何是或扩展 Integer 的类(或实现 Integer,如果 Integer 是一个接口)。

? super Integer 也是如此,这意味着:任何为 Integer 的类,或者是 Integer 的超类或超接口。

【讨论】:

  • 感谢您解决这个问题。选项可用时会接受答案。 span>
猜你喜欢
  • 2013-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多