Java nullpointerexception
-
21-09-2019 - |
質問
私は単純なオークションを処理するために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変数から参照される配列オブジェクトが作成されます。