0

単純なオークションを処理する 2 つのクラスを作成しています。単一のオークションの操作を処理するクラスの準備ができて動作しています。現在、利用可能なすべてのオークションを追跡するために、オークションハウスのような別のクラスを作成しています。クラスの次の部分をテストする場合:

import java.util.ArrayList;

public class AuctionHouse {
    private ArrayList<DutchAuction> huutokaupat;

    public AuctionHouse() {
    }

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

次のコードを含む main メソッド内 (「kauppa」は、テスト済みで機能するオブジェクト変数です):

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

私は得る:

スレッド「メイン」での例外 ope.auction.dutch.AuctionHouse.addAuction(AuctionHouse.java:13) での java.lang.NullPointerException ope.auction.dutch.DutchAuctionTest.main(DutchAuctionTest.java:54) での例外

どうすれば問題を解決できますか?

4

5 に答える 5

5

実際に ArrayList を作成したことはありません。あなたが必要

private ArrayList huutokaupat = new ArrayList();
于 2009-10-17T13:35:31.437 に答える
5

リストを作成するJava 1.4の方法については誰もが言及しています。Java 5 以降では、コレクションをインスタンス化する適切な方法には、ジェネリック型も含まれます。

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

さらに、ArrayList に固有の機能を使用する必要がない限り、実装ではなくインターフェイスを使用して hutokaupat を定義することをお勧めします。例えば:

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

List インターフェイスメソッドのみを使用する必要がある場合、または

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

Collection メソッドのみが必要な場合。List や Collection などのインターフェイスを使用して変数の型を定義すると、将来、実装 (ArrayList) を別のものに切り替えることができ、この切り替えによるコードへの影響は最小限に抑えられます。

于 2009-10-17T14:21:29.103 に答える
4

追加するとき、配列リストは初期化されません。コンストラクターで初期化するか、さらに良いことに、フィールドで初期化します。

private ArrayList huutokaupat = new ArrayList();
于 2009-10-17T13:35:48.433 に答える
1

huutokaupat初期化されていませんか?

于 2009-10-17T13:36:15.873 に答える
0

コンストラクターに追加します。

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

これにより、huutokaupat 変数から参照される ArrayList オブジェクトが作成されます。

于 2009-10-17T13:39:01.170 に答える