Java - 为null对象的字段赋值或声明没有构造函数的对象不为null

时间:2012-11-11 07:34:40

标签: java object constructor null

感觉就像一个超级基本的问题,但我无法绕过它。

有一个类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为null对象的字段赋值? 另一种解决方案是以某种方式声明一个非空的SmallPortfolio对象。

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

4 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:2)

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

SmallPortfolio Spor = new SmallPortfolio();

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

答案 2 :(得分:1)

Spor永远不会被初始化:

SmallPortfolio Spor;

替换为:

SmallPortfolio Spor = new SmallPortfolio();

答案 3 :(得分:1)

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

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

您上面显示的代码甚至不应该编译,因为您没有为Spor分配值(甚至不是null)。 (如果您确实分配了null,那么您将获得运行时nullpointer异常。)

如果混淆是如何在没有构造函数的情况下创建对象:在这种情况下,有一个,因为如果Java代码没有指定任何构造函数(但只有那时),那么有一个自动默认构造函数不需要参数。