如何在Java中以紧凑的方式为复杂对象指定字段的值?

时间:2013-06-06 17:17:44

标签: java el

我们在代码中遇到以下问题。我们的代码必须根据某个对象的字段做出很多决定,有时这些字段是通过复杂的路径访问的:

public void perform(OurBean bean) {
  if (bean != null 
    && bean.getWaybill() != null
    && bean.getWaybill().getTransaction() != null
    && bean.getWaybill().getTransaction().getGuid() != null) {
     // Do some action with the guid - a string
   }
}

我希望做的是做这样的事情:

public void perform(OurBean bean) {
  if (notEmpty(bean, "waybill.transaction.guid")) {
     // Do some action with the guid - a string
   }
}

现在我们使用Reflection机制自己实现了这样的功能。有没有更好的方法呢? JSP EL正是我们所需要的 - 使用getter和setter方法的表达式。但是,对于某些对象,我如何在Java代码中使用它,而不是JSP页面呢?到目前为止找不到任何好样品。

2 个答案:

答案 0 :(得分:0)

请参阅java.beans

示例:

   if (notEmpty(new Expression(bean, "waybill.transaction.guid", null).getValue()) {
     // Do some action with the guid - a string
   }

这只是一个例子,它可能需要更多的爱来让它按照您的需要工作,但是您可以从该包中重用许多有用的东西。

答案 1 :(得分:0)

如果您可以控制bean类,并且没有自动生成bean类,请为它们添加便捷方法:

public class ProgramLogic {
    public void perform(OurBean bean) {
        if (bean != null && bean.getWaybillTransactionId() != null) {
            // Do some action
        }
    }
}

public class OurBean {
    public String getWaybillTransactionId() {
        return waybill == null ? null : waybill.getTransactionGuid();
    }
}

public class Waybill {
    public String getTransactionGuid() {
        return transaction == null ? null : transaction.getGuid();
    }
}