如何将项目添加到List <! - 类型的列表中? extends Object - >

时间:2014-08-18 17:59:07

标签: list arraylist

我有一个类型为

的列表
List<? extends Object> = new ArrayList<oracle.jbo.domain.Date> ();

但是当我尝试将项目添加到此列表时,我得到编译时错误 - 这一步 -

a.add( new oracle.jbo.domain.Date() );

会抛出以下错误 -

Error(183,22):  cannot find method add(oracle.jbo.domain.Date)

如何在此列表中添加元素? 任何帮助表示赞赏。

由于

1 个答案:

答案 0 :(得分:1)

如果您的ArrayList包含oracle.jbo.domain.Date个实例,为什么要保存对List<? extends Object>的引用?如果要在列表中插入元素,应避免使用引用中的泛型(因为可以检查here)。但是您的ArrayList只能包含一种数据:

List<oracle.jbo.domain.Date> a = new ArrayList<oracle.jbo.domain.Date>();
a.add( new oracle.jbo.domain.Date() );

但是如果你真的有List<? extends Object>,那么抱歉你不能在该列表中插入元素。事实上,编译器没有关于它是哪种列表的int。这与以下不同:

List<Object> a = new ArrayList<Object>();

事实上,在这种情况下,您知道可以添加任何内容,因为所有内容都会延伸Object。但在这种情况下,其中任何一项都是合法的任务:

List<? extends Object> a = new ArrayList<Integer>();
List<? extends Object> a = new ArrayList<Double>();
List<? extends Object> a = new ArrayList<String>();

并且编译器不知道哪一个是当前的情况。因此,您无法插入元素。这通常用于制作只读对象。