程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java反射_轉變private中的變量及辦法的簡略實例

java反射_轉變private中的變量及辦法的簡略實例

編輯:關於JAVA

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中的變量及辦法的簡略實例就是小編分享給年夜家的全體內容了,願望能給年夜家一個參考,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved