Java - ArrayList - 访问对象字段

时间:2013-12-05 07:35:26

标签: java generics arraylist

当对象扩展我在ArrayList泛型中编写的类型时,如何访问ArrayList中对象的字段?

下面是代码:

ArrayList<ObjectA> objA = new ArrayList()<>;
objA.add( new ObjectA() );  
objA.add( new ObjectAB() ); // ObjectAB extends ObjectA

现在我想更改存储在列表

中的变量ObjectAB

(只有ObjectAB有此字段,而不是ObjectA)

2 个答案:

答案 0 :(得分:5)

如果我理解正确,你想做这样的事情:

ArrayList<ObjectA> objA = new ArrayList()<>;
objA.add( new ObjectA() );  
objA.add( new ObjectAB() ); // ObjectAB extends ObjectA

ObjectAB ab = (ObjectAB) objA.get(1);
ab.setFieldFromAB("foo");

因此,您必须将列表objA中的项目转换为ObjectAB类型。如果您不确定演员表是否会成功,您可能需要先进行一些检查,如

if(objA.get(1) instanceof ObjectAB) {
   ObjectAB ab = (ObjectAB) objA.get(1);
   ab.setFieldFromAB("foo");
} else {
   //doSomethingElse
}

答案 1 :(得分:1)

当您从ArrayList检索回来的对象时,您将只获得ObjectA类型的对象。 因为ArrayList<T>T类型对象的列表。

ObjectA obj0 = objA.get(0);
ObjectA obj1 = objA.get(1);   // This you cannot get as the reference of ObjectAB

您需要明确地将obj1向下转发为ObjectAB

ObjectAB obj1B = (ObjectAB) obj1;

但是如果你真的需要明确的向下转换,那么你就是在打败泛型的目的 - 类型安全。肯定会有更好的方法。