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)不会编译;因此,通过反转这两个参数来增加读取难度没有意义。