如何从枚举构造函数中抛出异常?例如:
public enum RLoader {
INSTANCE;
private RLoader() throws IOException {
....
}
}
产生了错误
未处理的异常类型 IOException
如何从枚举构造函数中抛出异常?例如:
public enum RLoader {
INSTANCE;
private RLoader() throws IOException {
....
}
}
产生了错误
未处理的异常类型 IOException
由于实例是在静态初始化程序中创建的,因此应该抛出 ExceptionInInitializerError
。
throw new ExceptionInInitializerError();
我有这样一个情况,我想在一些设置类中使用枚举作为键。数据库将存储一个字符串值,允许我们更改枚举常量而无需更新数据库(有点丑陋,我知道)。我希望在枚举的构造函数中引发运行时异常,以此来限制字符串参数的长度,避免在数据库中出现约束违规,并且我可以轻松地自己检测到它。
public enum GlobalSettingKey {
EXAMPLE("example");
private String value;
private GlobalSettingKey(String value) {
if (value.length() > 200) {
throw new IllegalArgumentException("you can't do that");
}
this.value = value;
}
@Override
public String toString() {
return value;
}
}
这种情况行不通。
您正在尝试从构造函数中抛出已检查的异常
。
此构造函数由INSTANCE
枚举条目声明调用,因此无法正确处理已检查的异常。
而且,在我看来,从构造函数中抛出异常是不好的风格,因为构造函数通常不应该做任何工作,尤其不应该创建错误。
另外,如果您想抛出一个IOException
,我假设您想从文件初始化某些内容,因此您应该考虑阅读这篇关于动态枚举的文章。