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

时间:2015-12-28 10:03:52

标签: 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 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());

      }
     }

3 个答案:

答案 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());