当对象扩展我在ArrayList泛型中编写的类型时,如何访问ArrayList中的对象的字段?
这是代码:
ArrayList<ObjectA> objA = new ArrayList()<>;
objA.add( new ObjectA() );
objA.add( new ObjectAB() ); // ObjectAB extends ObjectA
现在我想更改存储在列表中的ObjectAB中的变量
(只有ObjectAB拥有此字段,而ObjectA没有)
最佳答案
如果我对您的理解正确,则您想要执行以下操作:
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
}