1

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

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
   }
}

现在我们已经使用反射机制自己实现了这样的功能。有更好的方法吗?JSP EL 正是我们所需要的——使用 getter 和 setter 方法的表达式。但是我怎样才能在 Java 代码而不是 JSP 页面中为某个对象使用它呢?到目前为止找不到任何好的样品。

4

2 回答 2

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();
    }
}
于 2013-06-06T17:46:02.407 回答
0

查看java.beans

例子:

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

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

于 2013-06-06T17:23:37.067 回答