Java - 给空对象的字段一个值或声明一个没有构造函数的对象不是空



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

有一个班级价格组,我没有一个构造函数。

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代码未指定任何构造函数(但仅此时),则有一个自动默认构造函数不需要参数。

相关内容

  • 没有找到相关文章

最新更新