質問

私は単純なオークションを処理するために2つのクラスを書いています。私はクラスの準備ができていて、単一のオークションのオペレーションを処理していますが、今ではオークションハウスのような別のクラスを書いて、利用可能なすべてのオークションを追跡しています。クラスの次の部分をテストするとき:

import java.util.ArrayList;

public class AuctionHouse {
    private ArrayList<DutchAuction> huutokaupat;

    public AuctionHouse() {
    }

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

次のコードを持つメインメソッド内部(「カウッパ」は、テストされた作業オブジェクト変数です):

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

わかりました:

ope.auction.dutch.auction.addauction(auctionhouse.java:13)のope.auction.dutch.dutchauctiontest.main(dutchauctiontest.java:54)のスレッド「main」java.lang.nullpointerexceptionの例外

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

役に立ちましたか?

解決

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

private ArrayList huutokaupat = new ArrayList();

他のヒント

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

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

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

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

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

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

収集方法のみが必要な場合。リストやコレクションなどのインターフェイスを使用して変数タイプを定義することで、将来の実装(ArrayList)を他の何かに切り替えることができ、このスイッチを作成するとコードに最小限の影響があります。

アレイリストは、追加するときに初期化されません。コンストラクターでそれを初期化します。

private ArrayList huutokaupat = new ArrayList();

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

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top