首页 > 解决方案 > 调用“super()”必须是构造函数主体中的第一条语句。我该如何解决下面的这个问题?

问题描述

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

    }
}

标签: javaif-statementconstructorsuperruntimeexception

解决方案


您可以创建一个仅解析您的字符串的私有(静态)方法。或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")不是。


推荐阅读