0

自定义类的 ArrayList 没有 .add() 方法:

我可以定义一个对象的 ArrayList:

ArrayList<Object> thing = new ArrayList<Object>();


thing.add(otherThing); // works

但是,当我定义自定义类事物的列表时:

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

这可能吗?

谢谢

4

3 回答 3

7

otherThing的类型必须是Thing. 目前它的 type Object,这就是为什么它适用于第一种情况,但在第二种情况下失败。

在您的第一种情况下,ArrayList<Object>需要 type 的元素Object。由于它otherThing也是类型Object,所以它可以工作。

在第二种情况下,ArrayList<Thing>接受 type 的元素Thing。因为,你otherThing仍然是 type Object,而它应该是 type Thing,你得到了那个错误。

于 2013-04-23T03:39:36.910 回答
0
ArrayList<Thing> thing = new ArrayList<Thing>(); 

为此,您只能添加 Thing 的类型/实例,因为它违反了 Java Generic 准则,因此不允许添加。

ArrayList<Object> thing = new ArrayList<Object>();  

因为在这里你正在指定 Object 并且因为 Object 是超类,所以它可以正常工作。

于 2013-04-23T03:44:49.117 回答
0

otherThing没有被声明为Thing但是一个Object.

于 2013-04-23T03:50:14.813 回答