给你看个例子 form public class form { private String age; public String getAge() { return age;
} public void setAge(String age) { this.age = age; }}testClass c = Class.forName("form"); Class types[] =new Class[1]; types[0]=Class.forName("java.lang.String"); Method m = c.getMethod("setAge",types ); //setAge就是动态方法的名字 form t = new form(); m.invoke(t,"11212" );//传给方法的的参数 System.out.println(t.getAge());
PropertyDescriptor clazzPd = BeanUtils.getPropertyDescriptor(clazz, propretyName); if (clazzPd != null) { Class type = clazzPd.getPropertyType(); Method setMethod = clazzPd.getWriteMethod(); setMethod.invoke(object, new Object[] { value });
一种是反射机制:Class.forName(pockageName.className).newInstance(); 现在 MyObject myObj = new MyObject();
有创建对象了,设值就可以了:
如果有set器,可调用set器 设置就好了。如果没有智能用 "." 了
不知道 有没理解对楼主的意思。
还是我没说明白啊。
不过我自己找了一个PropertyDescriptor,大家可以看看
public class form { private String age; public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}}testClass c = Class.forName("form");
Class types[] =new Class[1];
types[0]=Class.forName("java.lang.String");
Method m = c.getMethod("setAge",types ); //setAge就是动态方法的名字
form t = new form();
m.invoke(t,"11212" );//传给方法的的参数
System.out.println(t.getAge());
Field[] fs = user.getClass.getDeclaredFields();
for(Field f : fs) {
f.setAccessible(true);
f.set(user,属性值);
}
throws IllegalArgumentException,IllegalAccessException, NoSuchFieldException {
Field field = getDeclaredField(object, fieldName);
field.setAccessible(true);
field.set(object, newValue);
}
getDeclaredField方法要自己写一下,不过也可以用 Class<?> clazz = object.getClass();
Field field = clazz.getDeclaredField(fieldName);但这样只能从给定的类中检索字段,不能检索继承的字段。
public static Field getDeclaredField(Object object, String name) throws NoSuchFieldException {
Field field = null;
Class<?> clazz = object.getClass();
do {
try {
field = clazz.getDeclaredField(name);
} catch (Exception e){ }
} while (field == null & (clazz = clazz.getSuperclass()) != null);
if (field == null) {
throw new NoSuchFieldException();
}
return field;
}
如果要改继承的父类字段,除非父类中有set()方法
这样你就可以用子类CLASS调用getMetheds()得到父类的set方法,然后invoke()
// 获得和属性对应的setXXX()方法的名字
String setMethodName = "set" + firstLetter + fieldName.substring(1);
// 获得和属性对应的setXXX()方法
Method setMethod = classType.getMethod(setMethodName,new Class[]{field.getType()});
setMethod.invoke(object, new Object[]{value});
propretyName);
if (clazzPd != null) {
Class type = clazzPd.getPropertyType();
Method setMethod = clazzPd.getWriteMethod();
setMethod.invoke(object, new Object[] { value });
getWriteMethod是set方法,getReadMethod()是get方法,