【问题标题】:Best way to add validation incase a list returns null?添加验证以防列表返回 null 的最佳方法?
【发布时间】:2017-01-06 21:14:05
【问题描述】:

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

 for (String s: personService.returnNames(){

       //do something
    }

注意:returnNames()的返回值是Strings的set

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

【问题讨论】:

  • 我认为这与验证无关。一个简单的if(personService.returnNames()!=null) 怎么样?
  • 我假设 validation 你的意思是 unit testing ?然后像Assert.assertnotNull( personService.returnNames() )
  • 更多解释在这里:stackoverflow.com/questions/2250031/…
  • 如果没有返回字符串,该方法应该返回一个空集,而不是nullretrunNames这个方法你有控制权吗?

标签: java string validation for-loop set


【解决方案1】:

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

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

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

【讨论】:

  • 如果列表可以为空,那么是的。
【解决方案2】:

真正的答案:简单地避免 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 

[免责声明:不应尝试向以这种方式创建的集合添加任何东西;因为这会导致异常]

【讨论】:

    【解决方案3】:
    Collection<String> returnedNames=personService.returnNames();
    if(returnedNames!=null){
        for (String s: returnedNames){
           //do something
        }
    }
    

    【讨论】:

    • 你应该避免的 Yoda 模式:en.wikipedia.org/wiki/Yoda_conditions ... in Java (whatever = null) 不会编译;因此,通过颠倒这两个参数来使其更难阅读是没有意义的。
    【解决方案4】:

    可选和流式怎么样?

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

    修复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-29
      • 2013-06-11
      • 2014-12-22
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      • 2014-04-02
      • 1970-01-01
      相关资源
      最近更新 更多