我有一个带有private static final字段的类,不幸的是,我需要在运行时更改.
使用反射我得到这个错误: java.lang.IllegalAccessException: Can not set static final boolean field
有没有办法改变价值?
Field hack = WarpTransform2D.class.getDeclaredField("USE_HACK");
hack.setAccessible(true);
hack.set(null, true);
Run Code Online (Sandbox Code Playgroud) 很短的问题:有更优雅的方法来做到这一点:
Object tmp;
try {
tmp = somethingThatCanFail();
} catch (Fail f) {
tmp = null;
}
final Object myObject = tmp;
// now I have a final myObject, which can be used in anonymous classes
Run Code Online (Sandbox Code Playgroud) 这个问题是我刚才提出的这个问题答案的结果.
据称这段代码"丑陋",因为它将变量初始化为永远不会被读取的值:
String tempName = null;
try{
tempName = buildFileName();
}
catch(Exception e){
...
System.exit(1);
}
FILE_NAME = tempName;
Run Code Online (Sandbox Code Playgroud)
这确实是不好的做法吗?是否应该避免将变量初始化为永远不会实际使用的虚拟值?
(编辑 - 那么将一个String变量初始化为""一个循环之前会将值连接到String ...?或者这是一个单独的类别?
例如
String whatever = "";
for(String str : someCollection){
whatever += str;
}
Run Code Online (Sandbox Code Playgroud)
)