我们在代码中遇到以下问题。我们的代码必须根据某个对象的字段做出很多决定,有时这些字段是通过复杂的路径访问的:
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页面呢?到目前为止找不到任何好样品。
答案 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();
}
}