2016-10-26 68 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循環完全沒有循環,會發生什麼?!

換句話說:相信你的編譯器。當它告訴你,你的方法「應該是無效的」時,則意味着:至少有一條路徑沒有返回值。它不會停止抱怨,直到你修復所有這些路徑!

最後:您可能想了解單層抽象原理。你看 - 你創建的代碼很難閱讀,你沒有看到這個明顯的問題。所以,你可以退一步現在學習如何編寫可讀代碼 ...