自定义类的ArrayList没有.add()方法:
我可以定义Object的ArrayList:
ArrayList<Object> thing = new ArrayList<Object>();
thing.add(otherThing); // works
但是,当我定义一个自定义类Thing的列表时:
ArrayList<Thing> thing = new ArrayList<Thing>();
thing.add(otherThing); // error
Canvas.java:33: cannot find symbol
symbol : method add(java.lang.Object)
location: class java.util.ArrayList<Thing>
thing.add(otherThing);
^
1 error
这可能吗?
由于
答案 0 :(得分:7)
您的otherThing
必须属于Thing
类型。目前它的类型为Object
,这就是为什么它适用于第一种情况,但在第二种情况下失败了。
在第一种情况下,ArrayList<Object>
采用Object
类型的元素。由于otherThing
属于Object
类型,因此也可以。
在第二种情况下,ArrayList<Thing>
采用Thing
类型的元素。由于您的otherThing
仍然属于Object
类型,而它应该属于Thing
类型,因此您会收到该错误。
答案 1 :(得分:0)
ArrayList<Thing> thing = new ArrayList<Thing>();
为此,您只能添加/ Thing实例的类型,但不允许这样做,因为它违反了Java Generic准则。
ArrayList<Object> thing = new ArrayList<Object>();
因为你在这里指定了对象,而对象是超类它可以正常工作。
答案 2 :(得分:0)
otherThing
未声明为Thing
,而是Object
。