[英]Set private field with reflection works on static OR final, but not static final (combined)
[英]Setting private static final field with reflection
基於使用Java反射更改私有靜態最終字段 ,我嘗試設置私有靜態最終字段。
(我知道這非常駭人聽聞,但是這個問題與代碼質量無關;與Java反射有關。)
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
class Main {
static class Foo {
private static final int A = 1;
int getA() {
return A;
}
}
public static void main(String[] args) throws Exception {
Field modifiers = Field.class.getDeclaredField("modifiers");
modifiers.setAccessible(true);
Field field = Foo.class.getDeclaredField("A");
field.setAccessible(true);
modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, 2);
System.out.println(new Foo().getA()); // should print 2
}
}
此打印
1
我已經使用OpenJDK 6和7,以及Oracle 7進行了嘗試。
我不知道Java反射能提供什么保證。 但是,如果失敗了,我以為會有一個Exception
(實際上所有反射方法都會拋出異常)。
這是怎么回事
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.