中易网

如何利用java反射顺序的从一个java类中得到其中定义的成员变量名或者方法

答案:3  悬赏:80  
解决时间 2021-01-15 15:34
  • 提问者网友:斑駁影
  • 2021-01-15 04:29
如何利用java反射顺序的从一个java类中得到其中定义的成员变量名或者方法
最佳答案
  • 二级知识专家网友:痴妹与他
  • 2021-01-15 05:30
我不太明白你问题的意思
不知道为什么你理解的那么复杂,对于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,这个并不冲突
全部回答
  • 1楼网友:詩光轨車
  • 2021-01-15 07:15
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);
}追问http://bbs.csdn.net/topics/390251554 文章中间提到 “我用几乎相似的方法,但获取到的成员变量的顺序却与类声明时候的顺序不一样”,这个怎么解决?追答你要么维护一个属性,这个属性里边按顺序放入get方法名,反射时直接获取方法名
  • 2楼网友:人類模型
  • 2021-01-15 06:58
下一个单元格要写入的是类中的什么字段(getXxx()方法),也就说要保证提取到
的get方法或成员变
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息