调用'super()'必须是构造函数体的第一条语句。如何解决下面这个问题?

问题描述 投票:1回答:1

任务是创建一个自己的异常类,它有一个构造函数。它有一个参数,是一个整数。如果它是零,我们必须用 "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");
        }

    }
}
java if-statement constructor super runtimeexception
1个回答
0
投票

你可以创建一个私有(静态)方法,它只是解析你的字符串。或者一个 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() 必须是构造函数中的第一条语句,可能是因为语言设计者希望确保超级构造函数在其他任何事情之前运行,以确保对象不会处于不一致的状态。

但在我看来,这有点奇怪,即

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

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

© www.soinside.com 2019 - 2024. All rights reserved.