2014-09-19 36 views

回答

4

由於其上setAccessible(true)已成功調用每個人都可以稱爲Method,它可以使用MethodHandles.publicLookup()就像任何其他Lookup對象所做的未反映。

畢竟,它是使用MethodHandle s訪問覆蓋的唯一方式,因爲java.lang.invoke本身不提供任何訪問覆蓋功能。

以下演示使用Field而非Method但令人印象深刻的結果:

Field m = String.class.getDeclaredField("value"); 
m.setAccessible(true); 
MethodHandle mh = MethodHandles.publicLookup().unreflectGetter(m); 
char[] ch = (char[])mh.invoke("hello"); 
Arrays.fill(ch, '*'); 
System.out.println("hello"); 
+0

啊,可惜我不需要運行它來了解輸出,因爲我之前已經搞混了。然而,謝謝你的答案 – DziNeIT 2014-09-19 19:26:33