繁琐的结账(Spring解决方案)

时间:2014-06-05 10:31:26

标签: java spring checkstyle pmd

我曾在一些基于Spring Framework的Web项目中工作过,我总是发现同样的PMD / Checkstyle问题导致复杂程度:(。这里有一个简单的例子:

我们定义父类。

public Class ObjectA(){
    private ObjectB objectB;

    public ObjectB getObjectB(){
         return objectB;
    }
}

其次我们定义了子类。

public Class ObjectB(){
    private String str;

    public String getStr(){
         return str;
    }
}

现在我从ObjectA获取String“str”的值,只有当它不为空时,我必须检查所有对象是否为空。

第一个解决方案(4个条件)

    if(objectA != null 
       && objectA.getObjectB() != null
       && objectA.getObjectB().getStr() != null 
       && !objectA.getObjectB().getStr().isEmpty()){
       // Do something...
    }

使用Spring的StringUtils的第二个解决方案(3个条件)

    if(objectA != null 
       && objectA.getObjectB() != null
       && StringUtils.hasText(objectA.getObjectB().getStr())){
       // Do something...
    }

我想知道在Spring中是否存在一些方法来检查ObjectA中的ObjectB是否为null,并且该方法必须检查ObjectA是否也为null。

感谢!!!

2 个答案:

答案 0 :(得分:2)

所有关于封装基本上是链接getter是一种反模式(imho)。

您应该在ObjectA中封装部分内容,您应该提供getstr方法并删除getObjectB()方法。

public class ObjectA {
    private ObjectB objectB;


    public String getstr() {
       return objectB != null ? objectB.getstr() : null;
    }
}

现在你的其他代码就是。

if (objectA != null && StringUtils.hasText(objectA.getstr()) { ... }

答案 1 :(得分:0)

您可以使用@NonNull Lombok的注释跳过空检查。

看看这个:

http://projectlombok.org/features/NonNull.html