感觉就像一个超级基本的问题,但我无法绕过它。
有一个类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的构造函数。
答案 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代码没有指定任何构造函数(但只有那时),那么有一个自动默认构造函数不需要参数。