2012-03-20 3 views
0

мне было интересно, если этот подход был правильным:Точка стиля с Try/уловом

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

Точки, на которых мне интересно, являются:

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

Благодарим за внимание! -

+0

Я не уверен, что это серьезный вопрос или нет. Несомненно, вы понимаете, что проглатывание исключения - это [известный анти-образец] (http://www.rockstarprogrammer.org/post/2007/jun/09/java-exception-antipatterns/)? – Perception

+0

Да, я знаю :), именно поэтому я и спрашивал: я не должен его проглатывать, но в моем случае очень часто возникает это исключение. Решение Jesper выглядит многообещающим, я собираюсь посмотреть на него (так как да, я использую Guava). –

ответ

1

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

Большое спасибо за ваши идеи. Я действительно удалил приведение в очередь, поскольку это было бесполезно, и определил мой предикат как окончательный, а также использовал перегрузку для Guava find :) –

0

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

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