2009-12-03 82 views
1

我有一個包含兩個ArrayList的類,我試圖存儲對象,每個對象類型一個。在我的主類,我將像這樣的對象:ArrayList的Java問題

for (int i =0; i < 3; i++) 
{ 
    Cat cat = new Cat("meow",i); 
    Dog dog = new Dog("woof",i); 
    objList.addCat(cat); 
    objList.addDog(dog); 
} 

我的鏈表類(objList)類設置,如:

import java.util.ArrayList; 

public class ObjectList { 
    public ArrayList cats; 
    public ArrayList dogs; 

    public ObjectList() 
    { 
     this.cats = new ArrayList(); 
     this.dogs = new ArrayList(); 
    } 

    public void addCat(Cat c) 
    { 
     this.cats.add(c); 
    } 

    public void addDog(Dog d) 
    { 
     this.dogs.add(d); 
    } 
} 

我得到一個java.lang.NullPointerException但在objList.addCat(cat);行開始。我在這行之前打印出了cat對象的屬性,並且這兩個值似乎都被設置了。我試圖看看我是否可以將一個int傳遞給我的addCat arrayList,但是我得到了同樣的錯誤,所以我假設我在我的類中不正確地使用了arraylist。我的代碼中是否有錯誤顯而易見?

+0

每當你問到與異常有關的事情時,請不要忘記包含堆棧跟蹤。 –

回答

6

的東西夫婦我建議:

  1. 不要讓你的領域公開的;
  2. 儘可能使用接口(列表而不是ArrayList);
  3. 贊成immutability或至少讓你的數據成員最終如果你不打算改變他們;和
  4. (與此無關)採用Java代碼約定。

那麼試試這個:

public class ObjectList { 
    private final List cats; 
    private final List dogs; 

    public ObjectList() { 
    cats = new ArrayList(); 
    dogs = new ArrayList(); 
    } 

    public void addCat(Cat c) { 
    cats.add(c); 
    } 

    public void addDog(Dog d) { 
    dogs.add(d); 
    } 
} 

這應該避免可能發生的任何外部變化。或者,更好的是,使用泛型:

public class ObjectList { 
    private final List<Cat> cats; 
    private final List<Dog> dogs; 

    public ObjectList() { 
    cats = new ArrayList<Cat>(); 
    dogs = new ArrayList<Dog>(); 
    } 

    public void addCat(Cat c) { 
    cats.add(c); 
    } 

    public void addDog(Dog d) { 
    dogs.add(d); 
    } 
} 

而你正在初始化你的對象列表實例嗎?

ObjectList objList = new ObjectList(); 
for (int i=0; i<3; i++) { 
    Cat cat = new Cat("meow",i); 
    Dog dog = new Dog("woof",i); 
    objList.addCat(cat); 
    objList.addDog(dog); 
} 
+0

謝謝的實例。這工作。 我正在使用processing.core庫,並正在處理設置函數中初始化我的ObjectList對象(這是我的主類的屬性)。我認爲它可以通過這種方式進行全球訪問,但似乎並不奏效。然而,在循環變得更有意義之前,初始化ObjectList。 感謝代碼和建議的話。 – minimalpop

+0

更完整的答案。 +1 – VonC

3

在使用它之前是否初始化了objList?

ObjectList objList = new ObjectList(); 

(做你的循環之前)

+1

@cletus:哪個構造函數?我不是在談論'ArrayList'(在ObjectList的構造函數中初始化),而是關於'ObjectList' – VonC