日期:2014-05-20 浏览次数:20754 次
import java.lang.reflect.Field; import java.lang.reflect.Method; public class ReflectDemo { public static void main(String[] args) throws Exception { PrivateTest t = new PrivateTest(); Field field = Class.forName("com.test.PrivateTest").getDeclaredField( "str"); // 不让Java语言检查访问修饰符 field.setAccessible(true); field.set(t, "world"); t.getStr(); Method method2 = Class.forName("com.test.PrivateTest") .getDeclaredMethod("method", new Class[] {}); method2.setAccessible(true); method2.invoke(t, new Object[] {}); } } class PrivateTest { private String str = "hello"; public void getStr() { System.out .println("I'm str,I'm a private field,my old value is hello,now I am --->" + str); } private void method() { System.out.println("I'm in a private method!"); } } --------------结果--------------------- I'm str,I'm a private field,my old value is hello,now I am --->world I'm in a private method!
------解决方案--------------------
楼主的问题不是很明确,如果要有类的实际路径的话就可以根据路径实例化出对象Class.forName("com.test.PrivateTest"),如果要是实例出的对象的属性需要赋值进去,或者用反射的方式获取或赋值,也可以用对象来set或者get,网上也有很多反射的例子,不是很难,看看就能明白了。
------解决方案--------------------
办法1:
public static void addToken(Object obj){
Field[] t = obj.getClass().getDeclaredFields();// 得到属性名部分
for (Field field : t) {
System.out.println(field);
field.setAccessible(true);
field.get(obj);
}
}
办法2:
public static void addToken(Object obj){
Field[] t = obj.getClass().getDeclaredFields();// 得到属性名部分
for (Field field : t) {
System.out.println(field);
[color=#FF0000]
String methodname = "get" + field.getName.substring(0,1).toUpperCase() + field.getName.substring(1);
Object value = obj.getClass().getMethod(methodname).invoke(obj);
color]
}
}