如何利用java反射顺序的从一个java类中得到其中定义的成员变量名或者方法
从数据库中提取数据到了ArrayList中,要写入Excel,所以在写入时我必须知道我下一个单元格要写入的是类中的什么字段(getXxx()方法),也就说要保证提取到的g...
从数据库中提取数据到了ArrayList中,要写入Excel,所以在写入时我必须知道
我下一个单元格要写入的是类中的什么字段(getXxx()方法),也就说要保证提取到
的get方法或成员变量的顺序。分不多了,先谢谢各位大神!! 展开
我下一个单元格要写入的是类中的什么字段(getXxx()方法),也就说要保证提取到
的get方法或成员变量的顺序。分不多了,先谢谢各位大神!! 展开
3个回答
展开全部
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
String fieldName = field.getName();
System.out.println("name====="+fieldName);
String firstLetter = fieldName.substring(0, 1).toUpperCase();
// 获得和属性对应的getXXX()方法的名字
String getMethodName = "get" + firstLetter + fieldName.substring(1);
// 获得和属性对应的getXXX()方法
Method getMethod = classType.getMethod(getMethodName, new Class[]{});
// 调用原对象的getXXX()方法
Object value = getMethod.invoke(object, new Object[]{});
System.out.println("value===="+value);
}
Field field = fields[i];
String fieldName = field.getName();
System.out.println("name====="+fieldName);
String firstLetter = fieldName.substring(0, 1).toUpperCase();
// 获得和属性对应的getXXX()方法的名字
String getMethodName = "get" + firstLetter + fieldName.substring(1);
// 获得和属性对应的getXXX()方法
Method getMethod = classType.getMethod(getMethodName, new Class[]{});
// 调用原对象的getXXX()方法
Object value = getMethod.invoke(object, new Object[]{});
System.out.println("value===="+value);
}
追问
http://bbs.csdn.net/topics/390251554 文章中间提到 “我用几乎相似的方法,但获取到的成员变量的顺序却与类声明时候的顺序不一样”,这个怎么解决?
追答
你要么维护一个属性,这个属性里边按顺序放入get方法名,反射时直接获取方法名
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
下一个单元格要写入的是类中的什么字段(getXxx()方法),也就说要保证提取到
的get方法或成员变
的get方法或成员变
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我不太明白你问题的意思
不知道为什么你理解的那么复杂,对于java的反射是可以直接获取字段Field的,而每一个Field都有其get set方法就相当于getXXX和setXXX了
我不知道你这个ArrayList里面装的是什么,写个小例子,我理解你需要处理的大概也就是这样吧
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
public class A {
private String field1;
private String field2;
public String getField1() {
return field1;
}
public void setField1(String field1) {
this.field1 = field1;
}
public String getField2() {
return field2;
}
public void setField2(String field2) {
this.field2 = field2;
}
public static void main(String[] args) {
A a = new A();
a.field1 = "1";
a.field2 = "2";
for(Field field:A.class.getDeclaredFields()){
try {
System.out.println(field.get(a));
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
另外List只是一个集合,也就是某种意义上来说是无序的,他的顺序是以装载的顺序定义的,你如何保证List中的数据顺序与类的属性定义顺序是一样的??这种用HashMap是不是要好点??
追问
List中存放每条数据库记录,比如对应DB中student表中的一条记录,对应java的是每一个student类的对象,要按照student类中属性的顺序写入到Excel中。你给的程序是可以的,但不知道是否能保证for循环field数组中方法顺序和类中声明的顺序一致么?getDeclaredFields方法在API中有说明:返回数组中的元素没有排序,也没有任何特定的顺序。
追答
其实List也是有顺序的,他是按照队列方式加入数据的,那么你只要保证Excel中的单元格定义与Student的属性定义是一致的就行了。
比如Student的属性定义为id,name,sex,age那么取出的Field的顺序也是id,name,sex,age,这个并不冲突
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询