Java NullPointerException

riz*_*ize 0 java algorithm runtime-error nullpointerexception

我正在编写两个类来处理简单的拍卖.我有一个准备好工作的班级,处理单次拍卖的操作,现在我正在编写另一个类似拍卖行的班级,以跟踪所有可用的拍卖.在测试课程的以下部分时:

import java.util.ArrayList;

public class AuctionHouse {
    private ArrayList<DutchAuction> huutokaupat;

    public AuctionHouse() {
    }

    public void addAuction(DutchAuction newAuction) {
        huutokaupat.add(newAuction);
    }
}
Run Code Online (Sandbox Code Playgroud)

在一个带有以下代码的main方法中("kauppa"是一个经过测试和工作的对象变量):

AuctionHouse talo = new AuctionHouse();
talo.addAuction(kauppa);
Run Code Online (Sandbox Code Playgroud)

我明白了:

在ope.auction.dutch.DutchAuctionTest.main(DutchAuctionTest.java:54)的ope.auction.dutch.AuctionHouse.addAuction(AuctionHouse.java:13)中的线程"main"java.lang.NullPointerException中的异常

我该如何解决这个问题?

Pau*_*lin 5

你从未真正创建过ArrayList.你需要

private ArrayList huutokaupat = new ArrayList();
Run Code Online (Sandbox Code Playgroud)


Kal*_*see 5

每个人都提到了Java 1.4创建列表的方法.在Java 5及更高版本中,实例化集合的正确方法也包括泛型类型:

ArrayList<DutchAuction> huutokaupat = new ArrayList<DutchAuction>();
Run Code Online (Sandbox Code Playgroud)

此外,除非您需要使用特定于ArrayList的功能,否则最好使用接口而不是实现来定义huutokaupat.例如:

List<DutchAuction> huutokaupat = new ArrayList<DutchAuction>();
Run Code Online (Sandbox Code Playgroud)

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

Collection<DutchAuction> huutokaupat = new ArrayList<DutchAuction>();
Run Code Online (Sandbox Code Playgroud)

如果你只需要收集方法.使用List或Collection之类的接口来定义变量类型,可以在将来使用其他东西切换实现(ArrayList),并使此开关对代码的影响最小.