Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在列表返回null时添加验证的最佳方法?_Java_String_Validation_For Loop_Set - Fatal编程技术网

Java 在列表返回null时添加验证的最佳方法?

Java 在列表返回null时添加验证的最佳方法?,java,string,validation,for-loop,set,Java,String,Validation,For Loop,Set,我的Java应用程序中有以下代码: for (String s: personService.returnNames(){ //do something } 注意:returnNames()的返回值是一组字符串 如何最好地验证此代码,以便即使没有返回字符串,应用程序也不会崩溃?这是否意味着该方法返回空列表或空列表 如果列表为空,则不会发生任何错误,for循环不会运行。如果列表可以为空,则需要先进行隐式检查,例如 if(personService.returnNames

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

 for (String s: personService.returnNames(){

       //do something
    }
注意:
returnNames()
的返回值是一组字符串


如何最好地验证此代码,以便即使没有返回字符串,应用程序也不会崩溃?

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


如果列表为空,则不会发生任何错误,for循环不会运行。如果列表可以为空,则需要先进行隐式检查,例如

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

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


如果列表为空,则不会发生任何错误,for循环不会运行。如果列表可以为空,则需要先进行隐式检查,例如

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

real答案:简单地避免将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 
class个人服务{
private final Set EMPTY_NAMES=Collections.emptySet();
字符串getNames(){
…如果尚未存储任何名称
返回空的\u行

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

真实的回答:只需避免将null作为返回值。当然,您可以在所有内容前面加上(set!=null)检查。但您不希望这样

Collection<String> returnedNames=personService.returnNames();
if(returnedNames!=null){
    for (String s: returnedNames){
       //do something
    }
}
特别是,当您的方法应该返回任何类型的集合时,这非常容易。因为:在这种情况下,您将返回该集合的空实例

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

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 
class个人服务{
private final Set EMPTY_NAMES=Collections.emptySet();
字符串getNames(){
…如果尚未存储任何名称
返回空的\u行
[免责声明:不应尝试向以这种方式创建的集合添加任何内容,因为这会导致异常]

Collection returnedNames=personService.returnNames();
Collection<String> returnedNames=personService.returnNames();
if(returnedNames!=null){
    for (String s: returnedNames){
       //do something
    }
}
if(returnedNames!=null){ for(字符串s:返回的名称){ //做点什么 } }
Collection returnedNames=personService.returnNames();
if(returnedNames!=null){
for(字符串s:返回的名称){
//做点什么
}
}

可选和流如何

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

修复。

可选和流如何

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

修复。

我认为这与验证无关。如果(personService.returnNames()!=null)一个简单的
怎么办?我假设
验证
是指
单元测试
?然后类似于
Assert.assertnotNull(personService.returnNames())
这里有更多解释:如果没有返回字符串,该方法应该返回一个空集,而不是
null
。您是否可以控制该方法
retrunNames
?我认为这与验证无关。简单的
If(personService.returnNames()!=null)怎么样
?我假设通过
验证
您的意思是
单元测试
?然后类似于
Assert.assertnotNull(personService.returnNames())
这里有更多解释:如果没有返回字符串,该方法应该返回一个空集,而不是
null
。您是否可以控制该方法
retrunNames
?如果列表可以为null,那么是。如果列表可以为null,那么是。Yoda模式应该避免:…在Java中(whatever=null)不会编译;因此,通过反转这两个参数来增加读取难度没有意义。Yoda模式应该避免:…在Java中(whatever=null)不会编译;因此,通过反转这两个参数来增加读取难度没有意义。