我越了解它的力量java.lang.reflect.AccessibleObject.setAccessible,我就越能对它做什么感到惊讶.这是根据我对问题的回答改编的(使用反射来更改静态最终File.separatorChar以进行单元测试).
import java.lang.reflect.*;
public class EverythingIsTrue {
static void setFinalStatic(Field field, Object newValue) throws Exception {
field.setAccessible(true);
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, newValue);
}
public static void main(String args[]) throws Exception {
setFinalStatic(Boolean.class.getField("FALSE"), true);
System.out.format("Everything is %s", false); // "Everything is true"
}
}
Run Code Online (Sandbox Code Playgroud)
你可以做真正令人发指的事情:
public class UltimateAnswerToEverything {
static Integer[] ultimateAnswer() {
Integer[] ret = new Integer[256];
java.util.Arrays.fill(ret, 42);
return ret;
}
public static void main(String args[]) throws Exception { …Run Code Online (Sandbox Code Playgroud) 假设我有以下课程:
public class System {
private String property1;
private String property2;
private String property3;
public void showProperties {
System.out.println("Displaying properties for instance "+<INSTANCE NAME>+"of object System:"
"\nProperty#1: " + property1 +
"\nProperty#2: " + property2 +
"\nProperty#3: " + property3);
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来获取将调用方法showProperties的System-instance的名称,以便在编写时:
System dieselEngine= new System();
mClass.property1 = "robust";
mClass.property2 = "viable";
mClass.property3 = "affordable";
dieselEngine.showProperties();
Run Code Online (Sandbox Code Playgroud)
控制台输出将是:
显示 对象'System'的例子dieselEngine 的属性:
财产#1:强大
财产#2:可行
物业#3:价格实惠