fro*_*die 20 java final exception constants
我一直在努力解决Java中的一个问题并且它已经开始找到我了,我真的想不出一个正确的解决方法.
我有一个最终的对象属性,但是动态的.也就是说,我希望值在指定后保持不变,但每个运行时的值可以不同.所以我在类的开头声明了类级变量 - 比如说private final FILE_NAME;.然后,在构造函数中,我为它赋值 - 比方说FILE_NAME = buildFileName();
当我在buildFileName()抛出异常的方法中有代码时,问题就开始了.所以我在构造函数中尝试这样的东西:
try{
FILE_NAME = buildFileName();
}
catch(Exception e){
...
System.exit(1);
}
Run Code Online (Sandbox Code Playgroud)
现在我有一个错误 - "空白的最终字段FILE_NAME可能尚未初始化." 这是我开始对Java的严格编译器感到有些恼火的地方.我知道这不会是一个问题,因为如果它到达catch,程序将退出...但编译器不知道,因此不允许此代码.如果我尝试在catch中添加一个虚拟赋值,我会得到 - "可能已经分配了最终字段FILE_NAME." 我显然不能在try-catch之前分配一个默认值,因为我只能分配一次.
有任何想法吗...?
Rya*_*ins 20
怎么样
String tempName = null;
try{
tempName = buildFileName();
}
catch(Exception e){
...
System.exit(1);
}
FILE_NAME = tempName;
Run Code Online (Sandbox Code Playgroud)
或
try {
FILE_NAME = buildFileName();
} catch (Exception e){
...
System.exit(1);
throw new Error();
}
Run Code Online (Sandbox Code Playgroud)
或者有人喜欢:
private static final String FILE_NAME = fileName();
private static String fileName() {
try {
return buildFileName();
} catch (Exception e){
...
System.exit(1);
throw new Error();
}
}
Run Code Online (Sandbox Code Playgroud)
但是调用System.exit静态初始化器可能是一个坏主意.它会破坏你的单元测试.
转念一想,我想我刚刚想出了一个解决方案!- 使用中间变量。
String fileName = null;
try{
fileName = buildFileName();
}
catch(Exception e){
...
System.exit(1);
}
FILE_NAME = fileName;
Run Code Online (Sandbox Code Playgroud)
不知道为什么我花了这么长时间才想到这个……
| 归档时间: |
|
| 查看次数: |
14280 次 |
| 最近记录: |