我的Java
应用程序中包含以下代码:
for (String s: personService.returnNames(){
//do something
}
注意:returnNames()
的返回值是字符串的set
我怎样才能最好validate
这段代码,这样即使没有返回字符串,应用程序也不会崩溃?
答案 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
})
);
修正。