2013-06-24 90 views
0

我在想這個問題的最佳設計是什麼。我有一個Season對象,其中包含一個ArrayList<Episode>,其中包含給定電視節目的一個季節中的每一集。現在讓我們假設我想要在給定的電視節目中搜索給定季節的第25集。下面的設計是否合適(拋出一個Exception)還是最好在錯誤狀態下創建一個對象,然後返回並讓調用方法出現錯誤?如果找不到對象,則返回getter方法的值

public class Season { 
    public Episode GetEpisode(int ep_no) throws Exception { 
     for(Episode ep : episodes) 
      if(ep.GetEpisodeNumber() == ep_no) return ep; 
     throw(new Exception("Episode not found.")); 
    } 

    private ArrayList<Episode> episodes; 
} 
+1

你應該有一個字典..並拋出你自己的異常,而不是普通的異常 – nachokk

+3

剛剛返回null – aaronman

+0

爲什麼你迭代'episodes'來檢查'ep_no'是否存在,而不是檢查' episodes'? – vidit

回答

4

這取決於。首先,我不會拋光Exception。我會創建一個新類型的異常。也許是EpisodeNotFoundException。這樣它就更具描述性。

其次,代碼是否需要處理這種情況發生時,還是不應該失敗。如果需要程序員干預,您應該拋出異常,而不是RuntimeException。拋出RuntimeException的代碼不需要由調用它的代碼處理。

此外,是否錯誤如果一集沒有找到,或者它是一個完全可以接受的事情發生?如果可以接受,則應該返回null。這是Map.get()的工作方式。

+0

這是完全可以接受的。這真的應該是一個「例外」,而不是反覆出現的事情,但我想解釋這一點。 – ApplePie

+0

@ AlexandreP.Levasseur我收到來自該回復的混合消息。如果它是可以接受的,但是你想對它進行解釋,那麼只需要調用'GetEpisode'的代碼來檢查if(response == null){...}' –

+0

如果我的回覆不太清楚,我很抱歉。我只是想知道這個情節是否被發現。如果不是那麼它很好,但調用方法應該知道它沒有找到。檢查'null'確實是完美的!我會在允許時提供複選標記。 – ApplePie

相關問題