我需要澄清使用get(int index)方法来检查arraylist中节点的记录数据字段。
import java.util.ArrayList;
public class ArrayNodeDemo {
public static void main(String args[]) {
ArrayList<Object> lstObject = new ArrayList<Object>();
Person p1 = new Person();
p1.setPersonId(1);
p1.setPersonName("Tom");
lstObject.add(p1);
Person p2 = new Person();
p2.setPersonId(2);
p2.setPersonName("Jerry");
lstObject.add(p2);
以下代码给出了节点位置:
System.out.println("1st record : " + lstObject.get(0));
System.out.println("2nd record : " + lstObject.get(1));
}
}
然而,以下错误:
System.out.println("1st record : " + lstObject.get(0).getPersonId());
System.out.println("2nd record : " + lstObject.get(1).getPersonId());
}
}
答案 0 :(得分:1)
根据您当前的ArrayList
声明,lstObject.get(0)
会返回Object
引用,并非所有Object
个实例都有getPersonId()
方法(事实上,大多数情况下)他们不是,所以编译器不允许lstObject.get(0).getPersonId()
。
您应该使用您想要放在ArrayList
中的确切类型:
ArrayList<Person> lstObject = new ArrayList<Person>();
这将让编译器知道lstObject.get(0)
返回对Person
的引用,因此编译器将允许您为该引用调用getPersonId()
。
答案 1 :(得分:0)
问题是,您将ArrayList
中的元素指定为Object
,因此Java不知道如何调用getPersonId()
。它可以是任何物体。只需使用get()
获取对象就可以了,因为从toString()
继承的每个类中都有一个默认方法Object
。您应该将数组声明为
ArrayList<Person> lstObject = new ArrayList<Person>();
答案 2 :(得分:0)
你有几个选择。 首先,您可以在数组列表声明中更改Object to Person,或者您可以在Print中向Person添加强制转换,如下所示:
System.out.println("1st record : " + ((Person)lstObject.get(0)).getPersonId());
System.out.println("2nd record : " + ((Person)lstObject.get(1)).getPersonId());