Java 为什么';空指针异常";她长大了吗?

Java 为什么';空指针异常";她长大了吗?,java,Java,我试图实现一个接口,但是我得到了“Null指针”异常,但我不知道为什么,也不知道如何避免它 类SpaceComposite.java import java.util.List; public class SpaceComposite extends SpaceComponent implements ISpaceComposite { private List<ISpaceComponent> _components; public SpaceComposite

我试图实现一个接口,但是我得到了“Null指针”异常,但我不知道为什么,也不知道如何避免它

类SpaceComposite.java

import java.util.List;
public class SpaceComposite extends SpaceComponent implements ISpaceComposite {

    private List<ISpaceComponent> _components;

    public SpaceComposite(String _title) {
        super(_title);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void addComponent(ISpaceComponent component) {
        _components.add(component);// HERE IS THE EXCEPTION RAISED

    }
}
接口ISpaceComposite从ISpaceComponent派生

public interface ISpaceComposite extends ISpaceComponent{
    public void addComponent(ISpaceComponent component);

}


public interface ISpaceComponent {
    // Title getter/setter
        String getTitle();
        void setTitle(String title);

    // Looking for a specific child
        ISpaceComponent findChild(String name);

    // We need to test this brave new world
    void runTtest();
}
类Demo.class尝试创建一个SpaceComposite

public static ISpaceComposite createSolarSystem() {

    ISpaceComposite solarSystem = new SpaceComposite("The Solar System");

    Star theSol = new Star("Sol");
    solarSystem.addComponent(theSol);
}
此行生成异常

public void addComponent(ISpaceComponent component) {
    _components.add(component);// HERE IS THE EXCEPTION RAISED

}
但是组件“component”被传递给函数,我不能查看List类

你知道吗,我做错了什么

另外,该代码是从C#.NET中采用的,在.NET中没有错误


伙计们!你说得对!但有这么多正确答案。。。。真的很困惑,我应该在哪里标记

实例化_组件?似乎从来没有创建过该列表

我将修改构造函数,如下所示:

public SpaceComposite(String _title) {
    super(_title);
    _components = new ArrayList<ISpaceComponent>();
}
public SpaceComposite(字符串标题){
超级(_title);
_components=新的ArrayList();
}

您没有初始化组件,请更改为:

private List<ISpaceComponent> _components = new ArrayList<ISpaceComponent>();
private List_components=new ArrayList();

它一定是在C版本的某个地方初始化的。

\U组件从未实例化过。改变

private List<ISpaceComponent> _components;
private List\u组件;

private List_components=new ArrayList();

您需要初始化字段
\u组件
,例如

private List<ISpaceComponent> _components = new ArrayList<ISpaceComponent>();
private List_components=new ArrayList();

您从未为
\u组件
字段赋值

使用以下命令初始化它:

private List<ISpaceComponent> _components = new ArrayList<>();
private List_components=new ArrayList();

发生错误的原因是您没有在SpaceComposite类中初始化组件。因此,它保持为null,并在第一次调用时导致NPE


您应该在SpaceComposite构造函数中初始化
\u组件
(因为它是在其中声明的类)。

您似乎没有初始化
\u组件
,因此当您尝试向其添加时,会得到一个
NullPointerException
。我想这是在C#NET版本的其他地方完成的

空间复合变化

private List\u组件

private List_components=new ArrayList()

如果愿意,也可以在构造函数中初始化它

private List<ISpaceComponent> _components = new ArrayList<ISpaceComponent>();
private List<ISpaceComponent> _components = new ArrayList<>();