2013-06-21 173 views
0

我有下面的方法,期望返回類型爲SomeObject。 mapData()函數返回SomeObject。只要滿足一個條件,我就想從循環中出來。由於沒有找到返回類型,我收到編譯錯誤。你能否指出我的病情?while while if else loop

public static SomeObject mapper(List<String> mylist) { 
    Iterator iter = mylist.iterator(); 
    while (iter.hasNext()) { 
     Object[] result = (Object[]) iter.next(); 
      if (condition){ 
       //dosomething 
       return mapData(abc); 
      }else if (condition) { 
       //dosomething 
       return mapData(def); 
      }else { 
       //dosomething 
       return mapData(ghi); 
      } 
    } 
    // Get compilation error due to no return type at this position 
} 
+3

您可以在'while'循環後添加'return null;'。 Geez ...現在看看人們如何爬行代表。 –

回答

4

想象一下當你的while循環從不執行會發生什麼?如果列表爲空,則會發生這種情況。在那種情況下,你的方法不會返回任何東西,因此錯誤。

只需添加一個return語句:

return null; 

while循環之後。或者返回SomeObject的默認實例,如果您還沒有完成null檢查此方法返回的值。

+0

+1這樣一個簡單而好的答案:) –

+0

@PravatPanda事實上,返回一個'null'是一個設計問題,在這裏討論[這裏](http://stackoverflow.com/q/271526/1065197)。國際海事組織我寧願評估如果方法*應該*返回'null'或不,而不是僅僅在底部設置'return null'。如果你不想在'while'循環之後返回任何東西,你可以拋出一個異常(如果想沉默,可以拋出一個'RuntimeException')並且在調用者中處理這個異常,正如arshajii的回答中所解釋的那樣,這可能導致另一種設計。 –

+0

@LuiggiMendoza。真正。應該早些時候添加這個。 Thnx :) –

0

在最後加上return null;(或)相關的return聲明。

如果您的while循環中沒有滿足條件,則會返回該條件。

3

編譯器要求所有可能的代碼路徑要麼

  • return
  • throw異常

你應該做哪個更有意義,在你的程序的情況下,在你這意味着將這些語句之一添加到方法的末尾。