2009-10-17 131 views
0

我在寫兩個類來處理簡單的拍賣。我有一個課程已準備就緒,可以處理單次拍賣的操作,現在我正在寫一個像拍賣行一樣的課程,以跟蹤所有可用的拍賣。當測試類的以下部分:用下面的代碼的主方法內Java空指針異常

import java.util.ArrayList; 

public class AuctionHouse { 
    private ArrayList<DutchAuction> huutokaupat; 

    public AuctionHouse() { 
    } 

    public void addAuction(DutchAuction newAuction) { 
     huutokaupat.add(newAuction); 
    } 
} 

(「kauppa」是測試和工作對象的變量):

AuctionHouse talo = new AuctionHouse(); 
talo.addAuction(kauppa); 

我得到:

線程「main」中的異常java.lang.NullPointerException at ope.auction.dutch.AuctionHouse.addAuction(AuctionHouse.java:13) at ope.auction.dutch.DutchAuctionTest.main(DutchAuctionT est.java:54)

我該如何解決這個問題?

回答

5

您從未真正創建過ArrayList。你需要

private ArrayList huutokaupat = new ArrayList(); 
4

當你添加到它時,你的數組列表不會被初始化。初始化它在你的構造函數,或更好,但在球場上:

private ArrayList huutokaupat = new ArrayList(); 
1

huutokaupat尚未初始化?

0

添加到構造函數:

public AuctionHouse() { 
    huutokaupat = new ArrayList(); 
} 

這將創造出從huutokaupat變量引用一個ArrayList對象。

5

大家都提到了創建列表的Java 1.4方式。在Java 5只及以上,實例化一個集合的正確方法將包括通用型,以及:

ArrayList<DutchAuction> huutokaupat = new ArrayList<DutchAuction>(); 

此外,除非你需要使用特定功能到一個ArrayList,這是更好地定義huutokaupat使用接口而不是執行。例如:

List<DutchAuction> huutokaupat = new ArrayList<DutchAuction>(); 

,如果你只需要使用List接口的方法,甚至

Collection<DutchAuction> huutokaupat = new ArrayList<DutchAuction>(); 

如果你只需要收集方法。使用像List或Collection這樣的接口來定義變量類型,可以將實現(ArrayList)與將來的其他類型切換,並且使這個切換對代碼的影響最小。