如何实例化和使用包含其他对象的对象?

时间:2018-06-09 14:51:06

标签: java android arrays class nullpointerexception

我试图使用面向对象的设计,但它有点令人困惑。我们说我有3个独立的对象

 public class Tool{
     String name;
     Float weight;
 }

 public class Drawer{
     String name;
     Tool[] tool;
 }

 public class Toolbox{
     String name;
     Drawer[] drawer;

 public void setDrawers(String[] drawers) {

    for(int i = 0; i < drawers.length; i++) {
        drawer[i].name = drawers[i];

    }
  }
}

所以工具有String和Float。抽屉有一个String和一个Tools数组。 Toolbox有一个String和抽屉数组。

所以,让我们在我的主要代码中说出来......

 Toolbox myBox = new Toolbox();
 myBox.setDrawers(drawers);

我得到空指针问题。如果我想实例化工具箱,那么实例化所有内容的正确方法是什么?每个类都在一个单独的Java文件中就可以,或者它们应该在一个文件中?由于所有类都在同一个应用程序中,我是否需要使用import语句?我的建筑师会是什么样子?还有什么我想念的吗?谢谢你的帮助。

请不要将此标记为&#34;空指针&#34;的副本。题。这不会解决包含其他对象数组的对象以及如何实例化所有对象。

2 个答案:

答案 0 :(得分:2)

这是一种更标准的方法。

public class Tool {
    final String name;
    final double weight;

    public Tool(String name, double weight) {
        this.name = name;
        this.weight = weight;
    }
}

public class Drawer {
    final String name;
    final List<Tool> tools;

    public Drawer(String name) {
        this.name = name;
        this.tools = new ArrayList<>();
    }
}

public class Toolbox {
    final String name;
    final List<Drawer> drawers;

    public Toolbox(String name) {
        this.name = name;
        this.drawers = new ArrayList<>();
    }

    public void addDrawers(String... names) {
        for (String name : names) {
            drawers.add(new Drawer(name));
        }
    }
}

现在你可以做到

String[] drawers = {"Screwdrivers", "Files", "Spanners"};
Toolbox toolbox = new Toolbox("My toolbox");
toolbox.addDrawers(drawers);

或者只是

Toolbox toolbox = new Toolbox("My toolbox");
toolbox.addDrawers("Screwdrivers", "Files", "Spanners");

答案 1 :(得分:1)

  

我收到空指针问题。

在myObject.callAMethod(aParameter)中; check myObject不为null。 另请参阅What is a NullPointerException, and how do I fix it?

  

如果我愿意,实例化所有内容的正确方法是什么   实例化工具箱?

每个班级都可以拥有自己的档案。如果你从java开始,我会这样做。有一些方法可以将所有内容放在同一个文件中,但您可以及时了解相关文件。 实例化的方式是以哪种顺序实现,有意义的是自下而上。第一个工具,然后是Drawer,然后是ToolBox。这样,当您创建封闭对象时,已经存在被绑定的元素。

  

我是否需要使用import语句

取决于您创建不同类的包。如果您需要导入该类,IDE将突出显示。

  

我已经阅读了整本关于在Android上编程Java的书,但事实并非如此   涵盖我问的问题。

这不可能是真的。