public class TestReflect {
public static void main(String[] args) throws Exception{
A a = new A();
Class<?> classType = a.getClass();
Field[] fields = classType.getDeclaredFields();
for(Field f : fields){
f.setAccessible(true);
f.set(a, "LiSi");
f.set(a,23);
System.out.println(f.get(a));
}
}
}
class A{
private String name = "ZhangSan";
private int age = 23;
}A类里面有两个成员变量,如何改变这两个成员变量的值,并且得到这两个值,Method可以根据方法的参数,但是成员变量怎么办呢?在线等
public static void main(String[] args) throws Exception{
A a = new A();
Class<?> classType = a.getClass();
Field[] fields = classType.getDeclaredFields();
for(Field f : fields){
f.setAccessible(true);
f.set(a, "LiSi");
f.set(a,23);
System.out.println(f.get(a));
}
}
}
class A{
private String name = "ZhangSan";
private int age = 23;
}A类里面有两个成员变量,如何改变这两个成员变量的值,并且得到这两个值,Method可以根据方法的参数,但是成员变量怎么办呢?在线等
下面有个例子你可以试一下
package com.test.maven;import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;public class ReflectTest {
public Object getObject()
{
Test t1=new Test("1","1");
return t1;
}
public static String change(String src) {
if (src != null) {
StringBuffer sb = new StringBuffer(src);
sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
return sb.toString();
} else {
return null;
}
}
public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, SecurityException, NoSuchMethodException, InvocationTargetException {
ReflectTest fst=new ReflectTest();
Object o=null;
o=fst.getObject();
Class clazz = o.getClass();
Field[] fields = clazz.getDeclaredFields();//所有属性
for (Field field : fields) {
System.out.print(field.getName()+" = ");
Method mth=clazz.getMethod("get"+change(field.getName()), null);
Object value=mth.invoke(o, null);
System.out.println(value);
}
}
}
Test.java
package com.test.maven;public class Test {
private String name;
private String age;
public Test(String name, String age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
Object value=mth.invoke(o, null);
这两句话是执行get方法
set方法与之类似
public class ReflectTest {
public static void main(String[] args) throws IllegalArgumentException,
IllegalAccessException {
Test test = new Test();
Class<?> class1 = test.getClass();
Field[] declaredFields = class1.getDeclaredFields(); for (Field field : declaredFields) {
if (field.getType().equals(int.class)) {
field.setAccessible(true);
field.setInt(test, 11);
}
} System.out.println(test.toString());
}
}public class Test {
private String name;
private int age; @Override
public String toString() {
return age + "";
}}
然后再修改