我有一个方法,根据if条件返回一些东西。但是当我使用下面的代码时,它无法识别我的return语句,并说要将方法声明更改为void。你能帮忙优化代码吗?
if(myList == null){
return abc;
} else {
for(myList myListItem : myList){
if(myList.getId() != null){
if(TEST1.equals(myListItem.getId())){
return abc;
} else if(TEST2.equals(myListItem.getId())){
return xyz;
} else if(TEST3.equals(myListItem.getId())){
return pqr;
}
}
}
}
答案 0 :(得分:1)
对于你的其他人,你没有返回任何东西......在那里返回一些东西或者在if:
之外返回一些东西 else {
for(myList myListItem : myList){
if(myList.getId() != null){
if(TEST1.equals(myListItem.getId())){
return abc;
} else if(TEST2.equals(myListItem.getId())){
return xyz;
} else if(TEST3.equals(myListItem.getId())){
return pqr;
}
}
}
**return something;**//<--here
}
//or return here
return something;//<-- OR HERE
答案 1 :(得分:1)
if(myList == null){
smth = abc;
} else {
for(myList myListItem : myList){
if(myList.getId() != null){
if(TEST1.equals(myListItem.getId())){
smth = abc;
} else if(TEST2.equals(myListItem.getId())){
smth = xyz;
} else if(TEST3.equals(myListItem.getId())){
smth = pqr;
}
}
}
return smth;
}
试试这个适用于不同条件的功能
答案 2 :(得分:0)
编译器只是告诉你代码中有路径不看到返回语句!
你的第一个如果在for-block中不有另一个;因此,当该东西为空时,没有返回语句!然后 - 如果for循环根本不循环会发生什么?!
换句话说:相信你的编译器。当它告诉你,你的方法“应该是无效的”时,则意味着:至少有一条路径没有返回值。在你修复所有这些路径之前,它不会停止抱怨!
最后:您可能想了解单层抽象原则。你看 - 你创建的代码很难读,你没有看到那个明显的问题。所以你现在可以退后一步,学习如何编写可读代码 ......
答案 3 :(得分:-1)
if (myList != null) {
for() {}
}
return abc;