0

我正在编写两个类来处理简单的拍卖。我已经准备好一个正在工作的类,它处理单个拍卖的操作,现在我正在编写另一个类,比如拍卖行,以跟踪所有可用的拍卖。在测试类的以下部分时:

import java.util.ArrayList;

public class AuctionHouse {
    private ArrayList<DutchAuction> huutokaupat;

    public AuctionHouse() {
    }

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

在具有以下代码的主要方法中(“kauppa”是经过测试且工作的对象变量):

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

我得到:

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

我该如何解决这个问题?

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 的功能,否则最好使用接口而不是实现来定义 huutokaupat。例如:

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 回答