Java Reflection_simpleプライベートで変数とメソッドの変更の例
class demotest {private string name = "123"; public getName(){system.out.println( "public getName" + name);返品名; } private getname2(){system.out.println( "private getname2" + name);返品名; }}たとえば、名前の値を変更します。変更する方法。 Java Reflectionを通じて変更する方法
まず、リフレクションを使用してgetNameメソッドを呼び出す方法を見てみましょう
class <demotest> calzz = demotest.class; constructor cons = clazz.getConstructor(new class [] {}); //これはクラスオブジェクトを取得するコンストラクターです。パラメーターが構築されているクラスのオブジェクト。例:Demotestにはコンストラクターメソッドパブリックデモテスト(String Arg0、String Arg1){......}があります
この時点で、コンストラクター= clazz.getConstructor(new class [] {string.class、string.class}); 2つのstring.calsは、それぞれArg0とarg1に対応しています。
次は次のとおりです。
demotest test =(demotest)cons.newinstance(new object [] {}); //対応するオブジェクトを生成します。パラメーター新しいオブジェクト[] {}は、構築方法に対応するパラメーターの特定の値です。前述のように:Demotest Test =(Demotest)Cons.NewInstance(new object [] {"li che"、 "Zhang San"});次:
メソッドメソッド= clazz.getMethod( "getName"、new class [] {string.class}); Method.Invoke(test、new Object [] {"Wang Wu"});この時点で、Wu Wuを印刷できます。
次に、名前の価値をプライベートとして変更する方法。
1。最初にフィールドを取得し、
フィールドフィールド= clazz.getDeclaredfield( "name");
2.このオブジェクトのアクセス可能なフラグを、示されたブール値に設定します。 Trueの値は、反射オブジェクトが使用されたときにJava言語アクセスチェックをキャンセルする必要があることを示します。 falseの値は、反射オブジェクトがJava言語アクセスチェックを実行する必要があることを示します。
field.setAccessible(true);
3.変数値を変更します
field.set( "name"、 "wang wu");
わかりました;
同じことがプライベート方法にアクセスすることにも当てはまります。
メソッドメソッド= clazz.getDeclaredMethod( "getName2"); method.setAccessible(true); Method.Invoke(test、new Object [] {"Wang Wu"});GetDeclaredFieldsを使用して、プライベートおよびパブリック保護フィールドを取得します
c.getfields()を使用する場合;パブリックタイプのプロパティのみを取得できます
プライベートで変数とメソッドを変更する上記のJava Reflection_Simpleの例は、私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。