我有一个类型为
的列表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)
如何在此列表中添加元素? 任何帮助表示赞赏。
由于
答案 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>();
并且编译器不知道哪一个是当前的情况。因此,您无法插入元素。这通常用于制作只读对象。