Java 如何使用arraylist的get(int index)方法,将节点作为带有数据字段的记录

Java 如何使用arraylist的get(int index)方法,将节点作为带有数据字段的记录,java,arraylist,Java,Arraylist,我需要澄清如何使用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

我需要澄清如何使用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).getPersonId());          
    System.out.println("2nd record : " + lstObject.get(1).getPersonId());

      }
     }

使用当前的
ArrayList
声明,
lstObject.get(0)
返回一个
Object
引用,并且并非所有
Object
实例都有
getPersonId()
方法(事实上,大多数实例没有),因此编译器不允许
lstObject.get(0).getPersonId()

您应该使用要放在
ArrayList
中的确切类型:

ArrayList<Person> lstObject = new ArrayList<Person>();
ArrayList lstObject=new ArrayList();

这将让编译器知道
lstObject.get(0)
返回对
Person
的引用,因此编译器将允许您为该引用调用
getPersonId()

问题是,您将
ArrayList
中的元素指定为
对象,因此Java不知道如何调用
getPersonId()
。它可以是任何物体。仅使用
get()
获取对象运行良好,因为从
对象继承的每个类中都有一个默认方法
toString()
。您应该将数组声明为

ArrayList<Person> lstObject = new ArrayList<Person>();
ArrayList lstObject=new ArrayList();

你有几个选择。 首先,可以在数组列表声明中将对象更改为Person,也可以在打印中添加对Person的强制转换,如下所示:

System.out.println("1st record : " + ((Person)lstObject.get(0)).getPersonId()); 
System.out.println("2nd record : " + ((Person)lstObject.get(1)).getPersonId());

为什么要指定
对象
的元素类型?您是否已将这些
Person
实例分配给
对象
变量,并期望能够访问
getPersonId
System.out.println("1st record : " + ((Person)lstObject.get(0)).getPersonId()); 
System.out.println("2nd record : " + ((Person)lstObject.get(1)).getPersonId());