0

感觉像是一个超级基本的问题,但我无法理解它。

有一个 PriceGroup 类,没有我要为其创建对象的构造函数。

class SmallPortfolio{
String id;  
// all the investments (stocks) belonging to this portfolio.
List<Investment> invList = new ArrayList<Investment>(); 
}

现在在一个单独的类中,我正在创建一个名为 Spor 的 SmallPortfolio 对象。

//
String id = InstanceID.getTextNormalize(); //this value is taken from an element from jdom.
SmallPortfolio Spor;
Spor.id = id; 
//some code that creates a list of investments
//some code that creates a list of SmallPortfolio objects

在java中,你如何给一个空对象的字段一个由NullPointerException获得的值?另一种解决方案是以某种方式声明一个不为空的 SmallPortfolio 对象。

这是一个奇怪的问题,但我正在使用的测试程序无法修改,并且它没有 SmallPortfolio 的构造函数。

4

4 回答 4

4

除非您自己定义一些构造函数,否则 Java 会自动为您创建一个默认的无参数构造函数。所以你可以写:

SmallPortfolio smallPort = new SmallPortfolio();

但是,在您的情况下, SmallPortfolio 类的作者可能应该提供了一个临时构造函数:

class SmallPortfolio{
    private final String id;  
    // all the investments (stocks) belonging to this portfolio.
    private final List<Investment> investments = new ArrayList<Investment>(); 

    public SmallPortfolio(String id) {
        this.id = id;
    }

    //getters + methods to add / remove investments
}
于 2012-11-11T07:37:43.123 回答
2

您需要做的就是初始化 Spor:

SmallPortfolio Spor = new SmallPortfolio();

这将创建一个非空对象。此外,如果您要在每次初始化后为其添加一个 id,您也可以将其添加到构造函数中。希望有帮助!

于 2012-11-11T07:37:20.100 回答
1

Spor从未初始化:

SmallPortfolio Spor;

用。。。来代替:

SmallPortfolio Spor = new SmallPortfolio();
于 2012-11-11T07:37:43.823 回答
1

问题有点不清楚,但是如果您问是否可以在 null 对象上分配字段或调用方法,那么,不,您不能。您需要拥有(或制作)您的班级的一个实例。

 SmallPortfolio Spor = new SmallPortfolio();
 Spor.id = id; 

The code you have shown above should not even compile, because you have not assigned a value (not even null) to Spor. (If you do assign null, you'll get a runtime nullpointer exception).

If the confusion was how to make an object when there is no constructor: In this case, there is one, because if the Java code does not specify any constructor (but only then), there is an automatic default constructor that does not need arguments.

于 2012-11-11T07:39:05.737 回答