【发布时间】:2014-02-13 00:05:29
【问题描述】:
考虑这个假设的课程(我在一个在线视频中找到):
public class Contrived<T extends Number> extends ArrayList<T> {
List <? extends T> values;
......
}
这里Contrived 可以接受的类型变量是Number 或Number 的某个子类型。但是类本身继承自ArrayList,所以无论类得到什么类型,都将决定ArrayList的类型。
现在有一个名为values 的字段,即List<? extends T values>。那么这意味着什么?
list 是否可以容纳扩展 T 的任何内容(进而扩展 Number)。
通过PECS (producer extends, consumer super) 规则,我可以只使用这个List 读取元素而不添加到list。
如果我需要传递list of doubles or some type T,constructor 会是什么样子?
【问题讨论】:
-
我不认为我完全理解
Contrived类背后的想法。它应该做什么?它扩展了ArrayList,并有一个列表values作为参考变量。因此该类基本上包含两个列表,该类的目的是什么?一个有用的构造函数取决于它(例如“构造函数应该做什么?”)。你能链接到源吗? -
@dst:这是一个假设的类。它这样做并不重要。但我想知道它的构造函数会是什么样子以及给定的
list字段可以执行哪些操作? -
public Contrived(List<T> list)? -
@HighCore @user1988876 或
public Contrived(List<? extends T> list)?还是你想要一个方法体? -
@HighCore:构造函数不应该是
public Contrived(List<? extends T> list)
标签: java generics wildcard bounded-wildcard