繁体   English   中英

适当的构造函数以Java运行所有方法

[英]Proper Constructors to Run all Methods in Java

我有这个类,需要知道需要哪个构造函数来创建可以立即使用其所有方法而不会出错的对象

public class Robot {
    private boolean fuelEmpty = true;
    private int roboID;
    private String greeting;
    private String securityProtocol;

//insert robot constructor here

public void destroyAllHumans(){
    while (fuelEmpty == false) {
        //robot begins to destroy all humans
    }
}
public int getRoboID(){
    return roboID;
}
public void greet(){
    System.out.println(greeting);
}
public void setSecurityProtocol(String proto){
    securityProtocol = proto;
}
}

例如应如下所示:

public Robot(int id, String greet) {
    roboID = id;
    greeting = greet;
}

或这个:

public Robot(int id, String greet) {
    roboID = id;
    greeting = greet;
    fuelEmpty = false;
}

要么:

public Robot(boolean full, int id, String greet, String proto) {
    roboID = id;
    greeting = greet;
    fuelEmpty = full;
    securityProtocol = proto;
}

为了使所有其他方法都可以正常运行,需要使用其中哪些(或其他不同方法)?

您可以根据需要尽可能多地重载构造函数,重要的是创建新对象后,该对象将被正确实例化。

一种方法可以是:

public Robot() {
    this(false, 0, "", "");
}

public Robot(int id) {
    this(false, id, "", "");
}

public Robot(boolean fuelEmpty, int roboID, String greeting, String securityProtocol) {
    this.fuelEmpty = fuelEmpty;
    this.roboID = roboID;
    this.greeting = greeting;
    this.securityProtocol = securityProtocol;
}

因此,请看所有其他构造函数在最后如何内部调用

public Robot(boolean fuelEmpty, int roboID, String greeting, String securityProtocol) 

这将给您保证,无论调用哪个构造函数,机器人都会完全创建,并且可以调用所有这些方法而不会崩溃

该解决方案的工作原理如下:

  • 你看你的每种方法
  • 您检查每种方法使用的字段
  • 如果该字段具有其默认值时该方法是否中断(例如,对于Objects为null ,对于布尔false ),则您将更仔细地检查

当对所有方法都执行此操作时,您将获得需要以某种方式初始化的那些字段的列表。 然后,您可以继续定义一个相应的构造函数。

但是,当然,这是错误的方法。

真正的答案是这样的:您不必将字段放入类,因为可以 您添加它们是因为它们是必需的,以便此类可以实现您希望其实现的要求(职责)。 含义:您专注于类应提供的方法。 然后,您需要确定实现这些方法所需的字段。

换句话说:您的班级中确实有班级需要的那些字段。 如果您有未使用的字段-那么您将摆脱它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM