2016-10-26 111 views
1

我有一个方法根据if条件返回一些内容。但是当我使用下面的代码时,它不能识别我的return语句,并说要将方法声明更改为void。你能帮助优化代码吗?Java使用嵌套的if else语句从方法返回值

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; 
     } 
    } 
} 
} 
+1

什么返回值,你期望如果列表由myList引用是空的? – Seelenvirtuose

回答

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; 
    } 

试试这个它会为你的函数的工作条件不同

+0

请注意这一点。它的返回值是基于ID与TEST1,TEST2或TEST3匹配的循环中的LAST值;而原始代码的返回值(如果它是编译的)将基于循环中的FIRST这样的值。 –

-1
if (myList != null) { 
    for() {} 
} 
return abc; 
+0

两种可能性之一是返回外部如果或添加返回其他 –

+0

至少,请为您的代码添加一些解释。事实上,它甚至没有编译。 – Seelenvirtuose

1

为了您否则你不返回任何东西......返回的东西存在或返回外面你如果事情:

  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 
0

编译器只是告诉你,有内有路你代码不是看到一个return语句!

您的第一个如果在for-block确实不是有别的;因此当这个东西为空时没有返回语句!然后 - 如果for循环完全没有循环,会发生什么?!

换句话说:相信你的编译器。当它告诉你,你的方法“应该是无效的”时,则意味着:至少有一条路径没有返回值。它不会停止抱怨,直到你修复所有这些路径!

最后:您可能想了解单层抽象原理。你看 - 你创建的代码很难阅读,你没有看到这个明显的问题。所以,你可以退一步现在学习如何编写可读代码 ...