问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-05-29 20:47

我来回答

3个回答

热心网友 时间:2023-11-24 10:48

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方法名,反射时直接获取方法名

热心网友 时间:2023-11-24 10:49

下一个单元格要写入的是类中的什么字段(getXxx()方法),也就说要保证提取到
的get方法或成员变

热心网友 时间:2023-11-24 10:49

我不太明白你问题的意思

不知道为什么你理解的那么复杂,对于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,这个并不冲突

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
成为百度用户,提问题要收费吗? 向百度提问题收费吗?谢谢! 向12398698发短信提问题要钱不 北大总裁班是什么机构 帮忙查一下邮局快递包裹现在到哪里了。KA04747114944 签订征地补偿协议的程序是什么呢 政府征收土地的程序是什么? ...感觉其它片子都比较差。无论是内涵、剧情、做工。希望能找到相同或... 王者荣耀里,韩信那句,破碎的身躯可以修复,友情亦是如此吗是什么意思... 王者荣耀 破碎的身躯可以修复,友情也是如此吗 入党刚转正不久在公司离职离职应该写什么时间 律师转正要多久 党员延期转正说明由个人写还是组织上的人说明? 关于中秋节的诗句2首 农行信用卡可以实现异地转账业务么? 农行信用卡在自动取款机能跨行打钱给别行的帐号吗??能打零钱吗?比如446 我的压缩文件原来一直都没事,都能打开的。有密码的,格式是7z。 狗狗身上的虱子会跑到人的头发里吗 小狗身上的虱子,跳蚤会不会到人的身上来?我家刚养的狗狗总是用后腿挠挠,会不会长虱子或是跳蚤?怎么办? 狗狗长跳蚤了,给他带除蚤环,跳蚤会跳到我身上来吗? 小狗身上有跳虱子怎么办 从一个小狗身边走过,虱子会不会跳到我身上 冬天狗狗会长虱子跳骚吗? 请问短时间接触有虱子或跳蚤的小狗会不会被小狗身上的虱子或跳蚤跳到身上来或者床上 狗狗身上的虱子会跳到人的耳朵里吗 狗狗身上的虱子会不会到处跑 我家的狗狗长虱子了,然后我有帮着抓和洗澡,再滴去虱药水,可是我发现这两天我身上时不时有虱子跳出来, 狗的虱子会跳到人身上同一个房间为什么其它人没有而我有 x53云铁高氯化聚乙烯防锈漆怎样喷涂 我国的保健品行业存在哪些问题? 大佬告诉我java 反射如何获取成员变量的值 男孩起个什么样的主播网名,要能吸引女孩的,网名不能长 展厅施工组织设计文献 古县邮政编码 炸鱼块没有腌直接套生粉怎么做才入味 炸鱼的技巧,炸鱼是用面粉还是生粉啊,,知道给说下,在这谢谢各位了!! 袋鼠一跳有8什么单位 如何提高语文阅读理解能力的方法 高中生如何提高阅读分析能力? 如何提高语文的阅读理解能力 袋鼠和兔子进行跳跃比赛……一道数学题,帮帮我!!! 别克GL8谦雅定制版正式亮相 有一部张敏演的电影,剧中张敏穿着长筒靴牛仔裤 张敏还挺会穿的,穿锡纸裙挺保守,腰有多么的细? 大胆的近义词 大胆的近义词是兴高采烈吗 如何理解企业形象就是生产力 大胆的近义词,徐了勇敢,英勇,胆大包天还有没有其它 观察,大胆,秘密,的近义词 大胆的近义词四字词语?