Точка стиля с try / catch - PullRequest
       6

Точка стиля с try / catch

0 голосов
/ 20 марта 2012

Мне было интересно, был ли этот подход правильным:

public ITask getState()
{
    statePredicate[Some predicate definition];
    ITask nextRunnable = null;
try {
    nextRunnable = Iterables.find((Iterable)queue, statePredicate);
} 
    catch (NoSuchElementException e) 
    {}
return nextRunnable;
}

Вопросы, которые меня интересуют:

  • должен ли предикат кэшироваться как член класса?
  • Я ничего не делаю с уловом, я даже не регистрирую его, потому что это нормально для моего приложения ничего не найти.
  • t возвращает ноль, потому что я делаю окончательный возврат.

Спасибо за ваш вклад! -

Ответы [ 2 ]

1 голос
/ 20 марта 2012

1) Если предикат всегда один и тот же, я бы сделал его членом класса static final.

2) Существует также версия Iterables.find, в которой можно указать значение по умолчанию для (при условии, что вы используете Google Guava).Тогда вам вообще не нужно иметь дело с NoSuchElementException.

3) Есть ли причина привести queue к Iterable?Если в этом нет необходимости, не разыгрывайте.

class MyClass {
    private static final Predicate STATE_PREDICATE = new Predicate<ITask>() {
        @Override
        public boolean apply(ITask input) {
            // ... your code here
        }
    };

    public ITask getState() {
        return Iterables.find(queue, STATE_PREDICATE, null);
    }
}
0 голосов
/ 20 марта 2012

Если исключение на самом деле является обычным случаем в вашем подходе, то вы должны поместить хотя бы комментарий в область захвата, чтобы дать понять всем, кто читает код, что оно было преднамеренным, а не ошибкой.По моему мнению, возвращение Null - это нечто иное, но это некоторые обстоятельства, которых нельзя избежать.

...