簡體   English   中英

調用“super()”必須是構造函數主體中的第一條語句。 我該如何解決下面的這個問題?

[英]Call to 'super()' must be first statement in constructor body. How can I solve this problem below?

任務是創建一個自己的異常 class 它有一個構造函數。 它有一個參數,即 integer。 如果它為零,我們必須用字符串“This”調用super,如果它不為零,我們必須調用“That”的super。 我不知道如何解決這個問題,因為如果我使用 If-Else 條件運算符,IDEA 會說“調用 'super()' 必須是構造函數主體中的第一條語句。”。 代碼是:

public class MyException extends RuntimeException {
    public MyException(int number) {
        if(number == 0) {
            super("This");
        } else {
            super("That");
        }

    }
}

您可以創建一個僅解析您的字符串的私有(靜態)方法。 Map

private static final Map<Integer, String> map;
static {
    map.put(1, "This");
    map.put(2, "That");
    map.put(3, "SomethingElse");
}

public MyException(int number) {
    super(map.get(number));
}

super()必須是構造函數中的第一條語句的原因可能是因為語言設計者希望確保超級構造函數在其他任何事情之前運行,以確保 object 不在不一致的 state 中。

但在我看來,這有點奇怪

if (something) {
    super("This");
}
else {
    super("That");
}

是不允許的,但super(something? "This": "That")不是。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM