为了账号安全,请及时绑定邮箱和手机立即绑定

Java:替代声明空构造函数以从另一个类初始化对象

Java:替代声明空构造函数以从另一个类初始化对象

qq_花开花谢_0 2022-07-06 17:08:11
我正在创建一个简单的基于文本的交互式应用程序,提示用户输入。每个输入对应一个特定的命令,该命令调用特定的方法。因为有很多方法,所以我选择在不同的类之间分配它们。所以应用程序是这样工作的:主类负责读取用户输入(使用 Scanner 对象)。然后,用户输入作为参数传递给 B 类中的方法 B,该方法决定输入对应于哪个命令。确定后,该方法调用正确的方法,该方法可以在任何其他类中(本例中为类 C 中的方法 C)这意味着我必须初始化对象实例以避免空指针异常。我必须从中初始化对象的类之一只有一个带参数的构造函数,但在这种情况下我实际上不想用值初始化对象,而只是将其用作对象的引用指针,所以我可以调用该类的方法。现在我正在使用一个空构造函数来解决这个问题,但是有没有比声明一个空构造函数更好的替代解决方案?我编写了我认为可以证明我的问题的代码:public class MainClass {    ClassB classB = new ClassB();    public void methodA {        classB.methodB(userInput);    }}public class ClassB {    ClassC classC = new ClassC();    public void methodB {        classC.methodC();    }}public class ClassC {    String name;    int age;    public ClassC(String name, int age) {        this.name = name;        this.age = age;    }    public ClassC() {    }    public void methodC() {        // Do something    }}
查看完整描述

2 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

真正的答案是:不要那样做。你看,如果那个 ClassC 是关于存储玩家的详细信息......首先调用它Player(即使在举例子时:使用有意义的名称以便人们理解你的意图)。

一旦我们谈论玩家,就会很清楚:一个Player对象可能应该模拟一个(人类或非人类)玩家。没有“没有”名字或年龄的人类。这告诉你:错误的方法。你的类和模型应该反映现实。

您不会预先创建空对象;您在有意义的时间点创建它们(然后您向它们提供必要的信息,因此您可以理想地通过将所有字段声明为最终字段来使对象不可变)。

所以,长话短说:退后一步,重新考虑你的设计。如果有“某事”不需要存在填充的 Player 对象,那么这可能应该是静态方法,并且它可能应该位于 Player 类上。


查看完整回答
反对 回复 2022-07-06
?
烙印99

TA贡献1829条经验 获得超13个赞

但在这种情况下,我实际上并不想用值初始化一个对象,而只是将它用作对象的引用指针,这样我就可以调用该类中的方法

问题是这些方法通常需要对象的状态才能有意义(即要初始化的字段)。static如果在您的情况下他们不这样做,那么制作方法(和 call ClassC.methodC())或将这些方法放在具有默认构造函数的其他类上可能更有意义。


查看完整回答
反对 回复 2022-07-06
  • 2 回答
  • 0 关注
  • 86 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信