java中映射getproperty_除了java反射api以外,还有没有其他更好的方法来获取对象的字段getter,或者我滥用PropertyDescriptor的getReadMethod?...

内容:

我正在使用从SOAP服务端点接收到的数据以通用方式构建Excel文档。我以列表的形式接收数据,并且根据所调用的方法为每个接收到的对象提供了模型(JavaBeans)。因此,我将工作表的第一行设置为对象字段(getDeclaredFields)的标题。然后,我继续使用对象列表中的值逐行填充列。

问题:

我还没有找到一种获取对象的字段值的可行方法。我尝试将getter与Java反射API结合使用,

findGetterName,findGetter,但是PropertyDescriptor的getName有时与从类的getDeclaredFields。

假设我通过大写两个名称来克服了这个问题,getReadMethod stil失败-

似乎没有找到使用is前缀的字段(即布尔字段)的吸气剂。我不知道我是否在滥用它,或者它是一个错误(调试getReadMethod似乎只适用于get前缀,尽管它似乎可以处理布尔值的is前缀情况)。

考虑到该字段在对象包的外部是不可访问的,因此仅通过调用getter即可。

有没有更好的方法来获取对象的字段获取器,或者我缺少使用获取器方法的东西?

更新:当JavaBean属性映射到XML元素时,Spring的BeanUtils似乎更好地通过其 getPropertyDescriptors

获得属性,而优于Java类的 getDeclaredFields 。

这样可以解决不同的字母情况。但是,如果不使用get前缀,它仍未找到readMethod。

编辑-按照Laszlo Lugosi的要求,显示getReadMethod的示例未找到以getter为前缀的示例。

一个简单的类:

class Test {

private String assignmentType;

private Boolean conserved;

public String getAssignmentType() {return assignmentType;}

public void setAssignmentType(String assignmentType) {this.assignmentType = assignmentType;}

public Boolean isConserved() {return conserved;}

public void setConserved(Boolean conserved) {this.conserved = conserved;}

}

使用上面链接的答案中编写的findGetter和findGetterName运行此命令:

{

Test obj = new Test();

obj.setAssignmentType("someType");

obj.setConserved(true);

Field[] fields = obj.getClass().getDeclaredFields();

String fieldName;

for (int i=0;i

fieldName = fields[i].getName();

java.lang.reflect.Method method;

Object val = null;

try {

method = obj.getClass().getMethod(findGetterName(obj.getClass(),fieldName));

val = method.invoke(obj);

}

catch (Exception e){

e.printStackTrace();

}

}

}

编辑2虽然我可以按照Laszlo Lugosi强调的约定简单地编写getReadMethod,但我确实更喜欢找到用于处理访问器的API。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值