Java reflect-Java反射
2520 ワード
一、reflectによるオブジェクトのインスタンス化
古い習慣に従って,まずコードをつける
Java反射のテスト
output:
A構築方法:0
Normal -> 2
A構造方法:10
Reflect -> 25
二、setAccessable方法で権限を越えてアクセスクラス内のプライベート変数をチェックする
テスト
古い習慣に従って,まずコードをつける
package com.yuan.refletion;
class A {
public int count;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public A(int start) {
count = start;
System.out.println("A :"+count);
}
public void increase(int step) {
count = count + step;
}
}
Java反射のテスト
package com.yuan.refletion;
import java.lang.reflect.*;
class B {
public static void main(String args[]) {
A Aa = new A(0); //
Aa.increase(2);
System.out.println("Normal -> " + Aa.getCount());
try {
Constructor<A> constructor = A.class.getConstructor(int.class); //
A AReflect =(A)constructor.newInstance(10); //
Method method = A.class.getMethod("increase", int.class); //
method.invoke(AReflect, 15); //
Field field = A.class.getField("count"); //
System.out.println("Reflect -> " + field.getInt(AReflect)); //
} catch (Exception e) {
e.printStackTrace();
}
}
}
output:
A構築方法:0
Normal -> 2
A構造方法:10
Reflect -> 25
二、setAccessable方法で権限を越えてアクセスクラス内のプライベート変数をチェックする
package com.yuan.refletion;
class A {
private int count;//
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public A(int start) {
count = start;
System.out.println("A :"+count);
}
public void increase(int step) {
count = count + step;
}
}
テスト
package com.yuan.refletion;
import java.lang.reflect.*;
class B {
public static void main(String args[]) {
A Aa = new A(0); //
Aa.increase(2);
System.out.println("Normal -> " + Aa.getCount());
try {
Constructor<A> constructor = A.class.getConstructor(int.class); //
A AReflect =(A)constructor.newInstance(10); //
Method method = A.class.getMethod("increase", int.class); //
method.invoke(AReflect, 15); //
Field field =A.class.getDeclaredField("count");//
//A.class.getField("count"); //
field.setAccessible(true);//
System.out.println("Reflect -> " + field.getInt(AReflect)); //
} catch (Exception e) {
e.printStackTrace();
}
}
}