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中的异常
我该如何解决这个问题?
你从未真正创建过ArrayList.你需要
private ArrayList huutokaupat = new ArrayList();
Run Code Online (Sandbox Code Playgroud)
每个人都提到了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),并使此开关对代码的影响最小.