2013-06-24 4 views
0

Мне интересно, какой лучший дизайн для этой проблемы. У меня есть объект , который имеет ArrayList<Episode>, который содержит каждый эпизод в сезоне для данного телешоу. Теперь, допустим, я хочу найти эпизод 25 данного сезона для данного телешоу. Является ли следующий дизайн подходящим (бросая исключение) или было бы лучше создать объект в состоянии ошибки, вернуть его и позволить вызывающему методу определить, что не так?Возвращаемое значение в методе геттера, если объект не найден

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

как насчет того, чтобы просто вернуть нуль – aaronman

+0

Почему вы повторяете «эпизоды», чтобы проверить, существует ли 'ep_no', и не проверять размер' episodes'? – vidit

ответ

4

Это зависит. Прежде всего, я бы не бросил голый Exception. Я бы создал новый тип исключения. Возможно, EpisodeNotFoundException. Таким образом, это более описательно.

Во-вторых, должен ли код обрабатывать эту ситуацию, когда это происходит, или это то, что не должно сбой. Если это потребует вмешательства программиста, вы должны выбросить исключение, которое вместо этого добавит RuntimeException. Код, который выбрасывает RuntimeException, не должен обрабатываться кодом, который его вызывает.

Кроме того, это ошибка , если эпизод не найден, или это вполне приемлемая вещь? Если это приемлемо, вы должны, скорее всего, вернуть null. Так работает Map.get().

+0

Это вполне приемлемо. Это действительно должно быть «исключение», а не повторяющееся, но я хочу объяснить это. – ApplePie

+0

@ AlexandreP.Levasseur Я получаю смешанные сообщения от этого ответа. Если это приемлемо, но вы хотите его учесть, просто введите код, который вызывает 'GetEpisode' check' if (response == null) {...} ' –

+0

Прошу прощения, если мой ответ был не совсем ясен. Я просто хочу узнать, найден ли эпизод или нет. Если это не так, это очень хорошо, но метод вызова должен знать, что он не найден. Проверка на 'null' была бы идеальной! Я поставлю галочку, когда она будет доступна. – ApplePie

Смежные вопросы