java反射_轉變private中的變量及辦法的簡略實例。本站提示廣大學習愛好者:(java反射_轉變private中的變量及辦法的簡略實例)文章只能為提供參考,不一定能成為您想要的結果。以下是java反射_轉變private中的變量及辦法的簡略實例正文
java反射_轉變private中的變量及辦法的簡略實例
class DemoTest{ private String name="123"; public getName(){ system.out.println("public getName " + name); return name; } private getName2(){ system.out.println("private getName2 " + name); return name; } }
如這個,要轉變name的值。若何轉變。經由過程java反射若何轉變
先來看看若何用反射來挪用getName辦法
class<DemoTest> calzz=DemoTest.class; Constructor cons=clazz.getConstructor(new class[]{});//這個是獲得class對象的結構辦法。參數為結構辦法的參數的類的對象。
如:DemoTest有一個結構辦法為public DemoTest(String arg0,String arg1){......}
這時候,Constructor cons=clazz.getConstructor(new class[]{String.class,String.class});兩個String.calss分離對應arg0,arg1.
接上去是:
DemoTest test=(DemoTest)cons.newInstance(new Object[]{});//生成響應的對象。參數new Object[]{} 就是結構辦法對應的參數的詳細值。如適才的: DemoTest test=(DemoTest)cons.newInstance(new Object[]{“李車”,"張三"});
接上去:
Method method=clazz.getMethod("getName",new Class[]{String.class}); method.invoke(test,new Object[]{"王五"});
這時候便可以打印出王五了。
那要若何把name為private 的值停止轉變呢。
1。先獲得field,
Field field=clazz.getDeclaredField("name");
2.將此對象的 accessible 標記設置為指導的布爾值。值為 true 則指導反射的對象在應用時應當撤消 Java 說話拜訪檢討。值為 false 則指導反射的對象應當實行 Java 說話拜訪檢討。
field.setAccessible(true);
3.對變量值停止修正
field.set("name","王五");
OK;
要拜訪公有的辦法也是一樣。
Method method=clazz.getDeclaredMethod("getName2"); method.setAccessible(true); method.invoke(test,new Object[]{"王五"});
用getDeclaredFields就可以獲得private 和public protend protected 的字段
假如用c.getFields();只能獲得public類型的屬性
以上這篇java反射_轉變private中的變量及辦法的簡略實例就是小編分享給年夜家的全體內容了,願望能給年夜家一個參考,也願望年夜家多多支撐。