Kocham Google Guava i używać go dużo, ale jest jedna metoda zawsze znajdę mi pisanie ..Dlaczego funkcja Iterables.find() w Guava generuje wyjątek NoSuchElementException, zamiast zwracać wartość zerową?
public static <T> T tryFind(Iterable<T> iterable, Predicate<T> predicate){
for(T t : iterable){
if(predicate.apply(t)){
return t;
}
}
return null;
}
Dla mnie to wydaje się być bardzo użytecznym dodatkiem do Iterables
(również do Iterators
dla tej sprawy), więc zastanawiam się, dlaczego go brakuje. Ponadto, podczas gdy widzę sens posiadania metodę, która rzuca NoSuchElementException
, może odróżnić znalezienie nieważne i nie znalezienie elementu, że sytuacja przychodzi tylko wtedy, gdy orzeczenie używasz jest
public boolean apply(T t){
return t==null;
}
który robi wydaje się być powszechnym przypadkiem.
Dlaczego projektanci guava zdecydowali się na takie zachowanie, zamiast zwracać wartość zerową, jeśli nie mogą jej znaleźć?
Oto javadoc dla [Iterables.find()] [1]
[1]: http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Iterables.html#find(java.lang.Iterable, com.google.common.base.Predicate)
Może byłoby lepiej, aby rzucić wyjątek sprawdzane, aby zapobiec jej klientów od zapomnienia ... – thSoft
Możliwa duplikat [Iterables.find i Iterators.find - zamiast rzucać wyjątek uzyskać null] (https: //stackoverflow.com/questions/2543052/iterables-find-and-iterators-find-instead-of-throwing-exception-get-null) – Stewart