我正在创建一个简单的、基于文本的交互式应用程序,系统会提示用户输入。每个输入对应一个特定的命令,调用特定的方法。因为方法比较多,所以我选择了分布在不同的类之间。所以应用程序是这样工作的:
主类负责读取用户输入(使用 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
}
}
最佳答案
真正的答案是:不要那样做。你看,如果 ClassC 是关于存储玩家的详细信息......首先将其称为 Player
(即使在举例子时:使用有意义的名称以便人们理解你的意图)。
一旦我们谈到玩家,就很清楚了:Player
对象可能应该模拟一个(人类或非人类)玩家。没有“没有”名字或年龄的人。那告诉你:错误的方法。您的类和模型应该反射(reflect)现实。
您不会预先创建空对象;您在有意义的那个时间点创建它们(然后您向它们提供必要的信息,因此您可以理想地通过将所有字段声明为最终的来使对象不可变)。
所以,长话短说:退后一步,重新考虑您的设计。如果有“某事”不需要填充的 Player 对象存在,那么它可能应该是静态方法并且它可能不是 坐在 Player 类上。
关于Java:声明空构造函数以从另一个类初始化对象的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54840256/