Me encanta Google guayaba y lo uso mucho, pero hay un método siempre me encuentro escribiendo ..¿Por qué Iterables.find() en Guava lanza NoSuchElementException, en lugar de devolver nulo?
public static <T> T tryFind(Iterable<T> iterable, Predicate<T> predicate){
for(T t : iterable){
if(predicate.apply(t)){
return t;
}
}
return null;
}
Para mí esto parece ser una adición muy útil para Iterables
(también a Iterators
para el caso), así que me pregunto por qué falta. Asimismo, si bien puedo ver el punto de tener un método que lanza NoSuchElementException
, quizás para distinguir entre encontrar un nulo y no encontrar el elemento, esa situación sólo viene para arriba si el predicado que está utilizando es
public boolean apply(T t){
return t==null;
}
la que doesn Parece ser un caso común.
Entonces, ¿por qué los diseñadores de guayaba eligieron tener este comportamiento, en lugar de simplemente devolver nulo si no puede encontrarlo?
Aquí es el Javadoc para [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)
quizás hubiera sido mejor para lanzar una excepción comprobada para evitar que los clientes olvidarlo ... – thSoft
duplicado posible de [Iterables.find y Iterators.find - en lugar de lanzar una excepción, obtener null] (https: //stackoverflow.com/questions/2543052/iterables-find-and-iterators-find-instead-of-throwing-exception-get-null) – Stewart