Resumen prácticamente lo dice todo. He aquí el fragmento correspondiente de código en ImmutableList.createFromIterable()
:¿Por qué ImmutableList.of() y sus amigos prohíben elementos nulos?
if (element == null) {
throw new NullPointerException("at index " + index);
}
me he encontrado esto varias veces y no puedo ver por qué una función de biblioteca de propósito general debe imponer esta limitación.
Editar 1: por "propósito general", estaría contento con el 95% de los casos. Pero no creo haber escrito 100 llamadas al ImmutableList.of()
todavía, y he sido mordido por esto más de una vez. Aunque tal vez sea un caso atípico. :)
Editar 2: supongo que mi gran queja es que esto crea un "hipo" cuando se interactúa con las colecciones estándar java.util
. Como señaló en su charla, los problemas con null
s en las colecciones pueden aparecer muy lejos de donde se insertaron esos nulos. Pero si tengo una larga cadena de código que pone valores nulos en una colección estándar en un extremo y los maneja correctamente en el otro, entonces no puedo sustituir una clase de colecciones de google en ningún momento, porque inmediatamente lanza un NullPointerException
.
Pregunta: ¿interpretas que "propósito general" significa "100% de los propósitos" o "95% de los propósitos"? –
responde en línea –
Re: edición 2: Esto es para afirmar que todos los puntos intermedios en el camino deben ser independientes de si pasan nulos a través o no. ¡No estoy de acuerdo con esto! Cada una de estas API debería permitir explícitamente nulo o explícitamente no permitirlo. Todo el mundo puede continuar presionando este punto todo lo que quiera, pero tenga en cuenta que es pura queja y nada constructivo. Incluso si nos convencieras a todos de que estábamos equivocados, equivocados, equivocados (improbables, por supuesto), aún no importaría: de todos modos, no podemos cambiarlo. –