【问题标题】:How to instantiate and work with objects containing other objects? [duplicate]如何实例化和使用包含其他对象的对象? [复制]
【发布时间】:2018-06-09 14:51:06
【问题描述】:

我正在尝试使用面向对象的设计,这有点令人困惑。假设我有 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];

    }
  }
}

所以一个工具有一个字符串和浮点数。抽屉有一个字符串和一个工具数组。 Toolbox 有一个 String 和一个 Drawers 数组。

所以让我们在我的主代码中说...

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

我遇到了空指针问题。如果我想实例化一个工具箱,那么实例化所有东西的正确方法是什么?每个类都在一个单独的 Java 文件中可以吗,还是应该在一个文件中?由于所有类都在同一个应用程序中,我需要使用 import 语句吗?我的构造函数会是什么样子?还有什么我想念的吗?感谢您的帮助。

请不要将此标记为“空指针”问题的重复项。这并不涉及包含其他对象数组的对象以及如何实例化所有内容。

【问题讨论】:

  • 对不起,这基本上太宽泛了。你问了 10 个不同的问题,都归结为:还没有足够的学习。说真的:Java 本身需要一定的学习时间。如果您还没有学习过这些基础知识,请不要用 Android 和应用程序让自己负担过重。
  • 你必须付出一些努力,这里是如何避免NullPointerException ideone.com/BJrqZq希望这可以给你一个开始的动力
  • Ghostcat,我已经阅读了一整本关于在 Android 上编程 Java 的书,但它没有涵盖我提出的问题。当答案不在书本上时,告诉我要努力学习也无济于事。如果您是这样的专家,只需回答问题并帮助人们。多花点时间回答问题,少花点时间贬低别人。您的帖子没有帮助。
  • 感谢 YCF。那么既然 Drawer 是由 Tools 组成的,我是否必须在使用 Drawer 之前实例化工具?
  • 它可能在某本书中,但不在我的。 amazon.com/Android-Application-Development-All-Dummies/dp/…

标签: java android arrays class nullpointerexception


【解决方案1】:

这是一种更标准的方法。

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");

【讨论】:

  • 那行得通。谢谢狮子座!
【解决方案2】:

我遇到了空指针问题。

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

如果我想实例化所有内容的正确方法是什么 实例化一个工具箱?

每个类都可以有自己的文件。如果您从 java 开始,我会这样做。有多种方法可以将所有内容放在同一个文件中,但您会及时了解。 按顺序实例化的正确方法是自下而上。首先是工具,然后是抽屉,然后是工具箱。这样,当你创建封闭对象时,封闭的元素就已经存在了。

我需要使用import语句吗

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

我已经阅读了一整本关于在 Android 上编程 Java 的书,但它没有 涵盖我提出的问题。

这不可能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 2018-08-02
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多