java - 调用“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");
}
}
}
解决方案
您可以创建一个仅解析您的字符串的私有(静态)方法。或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")
不是。
推荐阅读
- xml - 反正有翻译xml内容吗?
- ios - 从 iPhone 打开网页并绕过登录 - iOS
- azure - 带有json的天蓝色jmespath查询列表
- java - 在 Xpages Javabean 中实现 HikariCP
- c++ - 在 Visual Studio 代码中调试 C++ 时如何查看变量类型?
- python - 使用 python 登录 AWS Cognito 并获取令牌,就像人类用户一样
- swift - 通过 INDEX 更新和删除 userDefaults 中的对象
- ios - 如何在 iOS 中通过 HereMap SDK 使用 `extrudedBuildingsVisible` 属性
- opencart - Opencart 网站被黑了如何修复?
- jenkins - Jenkins Pipeline 作业中未填充代理字段