2015-12-28 16 views
-1

我需要澄清使用get(int index)方法來檢查數組列表中節點的記錄數據字段。 。如何使用arraylist的get(int index)方法,其節點作爲具有數據字段的記錄

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

你爲什麼要指定'Object'的元素類型?你是否已經將這些'Person'實例賦值給一個'Object'變量並且期望能夠訪問'getPersonId'? – user2357112

回答

1

用你當前的ArrayList聲明,lstObject.get(0)返回一個Object的引用,並不是所有的Object實例都有一個getPersonId()方法(實際上大多數都沒有),所以編譯器不允許lstObject.get(0).getPersonId()

你應該用準確的類型,你打算把在ArrayList

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

這將讓編譯器知道lstObject.get(0)返回到Person的引用,所以編譯器將允許您撥打getPersonId()爲該參考。

+0

感謝您的快速回復...是的,它現在的作品 –

0

問題是,您指定ArrayList中的元素爲Object,因此Java不知道如何調用getPersonId()。它可以是任何對象。只需獲得get()的對象即可正常運行,因爲從Object繼承的每個類中都有默認方法toString()。您應該聲明陣列爲

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

非常感謝... –

0

那麼您有幾個選項。 首先,你可以改變物體以人在你的數組列表聲明,或者您可以在打印如下面的添加投地的人:

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