想写一个方法,参数为各个类的对象。这个方法想实现通过这个对象获取对象中的属性值。
我写了个,现在可以取属性名,方法名什么的。但是不会取属性值。请帮我看看,谢谢。public void f(Object obj) {
Class classType = obj.getClass();
Field fields[] = classType.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
String fieldName = field.getName();
System.out.println(fieldName);
}
}
我写了个,现在可以取属性名,方法名什么的。但是不会取属性值。请帮我看看,谢谢。public void f(Object obj) {
Class classType = obj.getClass();
Field fields[] = classType.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
String fieldName = field.getName();
System.out.println(fieldName);
}
}
descClass.getMethod(setMethodName, value.getClass()).invoke(desc, value); 设值
desc 是Class
public static String getPrivate(RFCSource rfc,String fieldName){
Field[] fields = rfc.getClass().getDeclaredFields();
for(int i = 0 , len = fields.length; i < len; i++) {
String varName = fields[i].getName();
if(varName.equals(fieldName)){
fields[i].setAccessible(true);
try {
Object oj=fields[i].get(rfc);
String data=oj.toString();
fields[i].setAccessible(false);
return data;
} catch (IllegalArgumentException e) {
throw new AppException(MsgService.getMsg("nvf_00022"));
} catch (IllegalAccessException e) {
throw new AppException(MsgService.getMsg("nvf_00022"));
}
}
}
return null;
}
注意这句
Object oj=fields[i].get(rfc);
rfc是你传入的Object的实例
这样就能取到你给定的对象实例的某个Field的值
spring实现机制就是你这样的嘛。你就差把属性名拼接成get setter方法然后来通过反射调用方法了LZ你懂的// 获得相应属性的getXXX和setXXX方法名称
String getName = "get" + stringLetter + fieldName.substring(1);
System.out.println("getName :" + getName);
String setName = "set" + stringLetter + fieldName.substring(1);
System.out.println("setName :" + setName);
// 获取相应的方法
Method getMethod = classType.getMethod(getName, new Class[] {});
Method setMethod = classType.getMethod(setName, new Class[] { field.getType() });
import java.lang.reflect.Field;class Point{
private int a;
private int b;
public Point() {
super();
} public Point(int a, int b) {
super();
this.a = a;
this.b = b;
}
}public class Test {
public static void main(String args []) throws IllegalArgumentException, IllegalAccessException{
Point point=new Point(3,4);
f(point);
}
public static void f(Object obj) throws IllegalArgumentException, IllegalAccessException {
Class classType = obj.getClass();
Field fields[] = classType.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
String fieldName = field.getName();
System.out.println("第"+i+"个属性名:"+fieldName);
//获取属性值
field.setAccessible(true);//因为属性a,b是私有的,要暴力获取,如果属性是共有的,就不要写这句代码
System.out.println("第"+i+"个属性值:"+field.get(obj));
}
}}
//结果
//第0个属性名:a
//第0个属性值:3
//第1个属性名:b
//第1个属性值:4
try {
Object oj=fields[i].get(rfc);
String data=oj.toString();
fields[i].setAccessible(false);
return data;