当对象扩展我在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
}

10-02 05:44