簡體   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