为了账号安全,请及时绑定邮箱和手机立即绑定

Java反射遍历嵌套对象并列出和更新字段

Java反射遍历嵌套对象并列出和更新字段

富国沪深 2021-08-25 09:46:18
我有以下复杂的 POJO 类发票public class Measure {    private String id;    private Float value;    public String getId() { return id; }    public void setId(String id) { this.id = id; }        public Float getValue() { return value; }    public void setValue(Float value) { this.value = value; }}public class LineItem {    private Integer lineNumber;          private Measure shipped;           private List<LineItem> lineItems;      public Integer getLineNumber() { return lineNumber; }    public void setLineNumber(Integer lineNumber) { this.lineNumber = lineNumber; }    public Measure getShipped() { return shipped; }    public void setShipped(Measure shipped) { this.shipped = shipped; }    public List<LineItem> getLineItems() { return lineItems; }    public void setLineItems(List<LineItem> lineItems) { this.lineItems = lineItems; }}public class Invoice {    private String originUid;    private String vehicleUid;    private List<LineItem> lineItems;    public String getOriginUid() { return originUid; }    public void setOriginUid(String originUid) { this.originUid = originUid; }    public String getVehicleUid() { return vehicleUid; }    public void setVehicleUid(String vehicleUid) { this.vehicleUid = vehicleUid; }    public List<LineItem> getLineItems() { return lineItems; }    public void setLineItems(List<LineItem> lineItems) { this.lineItems = lineItems; }}现在我想深入遍历每个字段,包括 Invoice 对象中的嵌套对象,并使用反射更新它们。我可以递归调用 updateIncomingObject()。但我需要知道如何将嵌套对象从字段中取出,如注释部分所示。如何将字段转换为对象实例?
查看完整描述

1 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

要访问数组的对象(用 [] 定义的字段),您可以执行以下操作:


if (incomingField.getType().isArray()) {

   Object[] thisArray = (Object[]) incomingField.get(incomingObject);

   for (int k = 0; k < thisArray.length; k++) {

      Object occurrence = thisArray[k];

      Object result = updateIncomingObject(occurrence);

      thisArray[k] = result;

   }

   incomingField.set(incomingObject, thisArray);

要访问List的对象,您可以执行以下操作:


if (List.class.isAssignableFrom(incomingField.getType())) {

    List<?> thisList = (List<?>) incomingField.get(incomingObject);

    for (int k = 0; k < thisList.size(); k++) {

        Object occurrence = thisList.get(k);

        Object result = updateIncomingObject(occurrence);

        thisList.set(k, occurrence);

    }

}

注意:如果在迭代数组/列表时调用updateIncomingObject并且数组/列表中的对象是数组 (Object[]),则您的方法将不会执行任何操作,因为数组 (Object[]) 的声明字段数班级为0。


我希望这对你有帮助。


查看完整回答
反对 回复 2021-08-25
  • 1 回答
  • 0 关注
  • 600 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信