添加验证的最佳方法是列表返回null?

时间:2016-08-30 14:15:09

标签: java string validation for-loop set

我的Java应用程序中包含以下代码:

 for (String s: personService.returnNames(){

       //do something
    }

注意:returnNames()的返回值是字符串的set

我怎样才能最好validate这段代码,这样即使没有返回字符串,应用程序也不会崩溃?

4 个答案:

答案 0 :(得分:0)

这是否意味着该方法返回一个空List或一个空List?

如果列表为空,那么没有任何不好的事情发生,for循环就不会运行。如果List可以为null,那么您需要进行隐式检查,例如

if(personService.returnNames() != null) {
    for (String s: personService.returnNames(){
       //do something
    }
}

答案 1 :(得分:0)

真实答案:简单地避免将null作为返回值。当然,您可以在所有内容之前放置一个(set!= null)检查。但你不希望这样。

特别是,当你的方法应该返回任何类型的集合时,这真的很容易。因为:在这种情况下,您返回该集合的空实例!

所以,在你的情况下,你可以做

A)将“returnNames”重命名为更有意义的内容,例如“getNames”

在PersonService类中,您可以执行以下操作:

class PersonService {
  private final Set<String> EMPTY_NAMES = Collections.emptySet();

  String getNames() {
    ... if no names are stored yet
    return EMPTY_LINES 

[免责声明:不应该尝试将添加任何内容添加到以这种方式创建的集合中;因为那导致例外]

答案 2 :(得分:0)

Collection<String> returnedNames=personService.returnNames();
if(returnedNames!=null){
    for (String s: returnedNames){
       //do something
    }
}

答案 3 :(得分:0)

可选和流怎么样?

    Optional.of(personService.returnNames())
            .ifPresent(
                    o -> o.stream()
                            .filter(s -> s != null)
                            .forEach(s -> {
                                //something
                            })
            );

修正。