如何通过反射访问私有变量和私有方法

来源:互联网 发布:数学英文词典软件 编辑:程序博客网 时间:2024/04/30 04:15
package tiaoshi;


public class PrivateObject {
private String privateString = null;
public PrivateObject(String privateString) {
// TODO Auto-generated constructor stub
this.privateString = privateString;
}

private String getPrivateString(){
return this.privateString;

}

private void setPricateString(String privateString){
this.privateString = privateString;
}

}


测试类:

package tiaoshi;


import java.lang.reflect.Field;
import java.lang.reflect.Method;


public class ceshi {
public static void main (String []args){
//访问私有变量
PrivateObject kObject= new PrivateObject("the test");
try {
Field kField = PrivateObject.class.getDeclaredField("privateString");
kField.setAccessible(true);
String kString = (String)kField.get(kObject);
System.out.println(kString);


} catch (Exception e) {
// TODO: handle exception
}

//访问私有方法
PrivateObject kObject1= new PrivateObject("the test");
try {
Method kField1 = PrivateObject.class.getDeclaredMethod("getPrivateString", null);
kField1.setAccessible(true);
String kk = (String)kField1.invoke(kObject1, null);
System.out.println(kk);
} catch (Exception e) {
// TODO: handle exception
}


PrivateObject kObject2 = new PrivateObject();
try {
Method gg = PrivateObject.class.getDeclaredMethod("setPricateString",  String.class);
gg.setAccessible(true);
gg.invoke(kObject2, "5555");
Method tt = PrivateObject.class.getDeclaredMethod("getPrivateString", null);
tt.setAccessible(true);
String dd = (String) tt.invoke(kObject2, null);
System.out.println(dd);
} catch (Exception e) {
// TODO: handle exception

}



}
}

原创粉丝点击