感觉就像一个超级基本的问题,但我无法缠绕它。
有一个班级价格组,我没有一个构造函数。
class SmallPortfolio{
String id;
// all the investments (stocks) belonging to this portfolio.
List<Investment> invList = new ArrayList<Investment>();
}
现在在一个单独的类中,我正在创建一个名为spor的小港口对象。
//
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的构造函数。
除非您自己定义了某些构造函数,否则Java将为您自动为您创建一个默认的no-argument构造函数。因此您可以写:
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
}
您要做的就是初始化spor:
SmallPortfolio Spor = new SmallPortfolio();
这将创建一个非编号对象。另外,如果您要在每次初始化之后向其添加ID,则不妨将其添加到构造函数中。希望有帮助!
Spor
永远不会初始化:
SmallPortfolio Spor;
替换为:
SmallPortfolio Spor = new SmallPortfolio();
问题有点不清楚,但是如果您询问是否可以在null对象上分配字段或调用方法,那么,不,您不能。您需要(或使)班级的实例。
SmallPortfolio Spor = new SmallPortfolio();
Spor.id = id;
您上面显示的代码甚至不应该编译,因为您没有将值(甚至还为null)分配给Spor
。(如果您确实分配了null
,您将获得一个运行时NullPointer异常)。
如果混乱是在没有构造函数时如何制作对象的方法:在这种情况下,有一个,因为如果Java代码未指定任何构造函数(但仅此时),则有一个自动默认构造函数不需要参数。