4

使用 commons-beanutils 访问嵌套 bean 时,有什么方法可以防止 NPE?这是我的代码:

new BeanUtilsBean().getProperty(human, "parent.name");

在这种情况下,我想getProperty()要么返回空字符串(“”),human.getParent() == null要么以其他方式处理它,而不是抛出 NPE。

4

3 回答 3

2

PropertyUtils有一个嵌套属性的特定方法,getNestedProperty(...)通过抛出 a 来处理 NPE NestedNullException,这可能(?)对眼睛更好。

这是Javadoc

于 2013-07-12T06:53:37.300 回答
2

他们正在考虑向 JDK7添加语言功能,但最终没有添加

现在你必须手动检查。您可以破解它并创建一个类似的函数

public static void propertyHack(Object bean, String property, String nullreplace){
  try{
    return new BeanUtilsBean().getProperty(bean, property);
  }
  catch(NullPointerException npe){
    return nullreplace;
  }
}

有点糟糕,但它会工作。

于 2010-05-02T11:28:08.820 回答
1

如果其他人正在寻找答案

    Guia g = new Guia();
    GuiaParticipante gp = new GuiaParticipante(1);
    g.setTbGuiaParticipanteCollection(Collections.singletonList(gp));//comment this line to test
    String name = "tbGuiaParticipanteCollection[0].codParticipante";//the expression itself
    Resolver resolver = new DefaultResolver();//used to "clean" the expression
    if (resolver.isIndexed(name)) {
        String property = resolver.getProperty(name);//remove the [0].codParticipante

        if (PropertyUtils.getProperty(g, property) != null) { //get the collection object, so you can test if is null
            String cod = BeanUtils.getNestedProperty(g, name); //get the value if the collection isn't null
            System.out.println(cod);
        }
    } 
于 2014-04-23T14:11:54.010 回答