Por qué el bucle for mejorado no está realizando una comprobación nula antes de iterar sobre la colección.Por qué Enhanced for loop no está realizando la comprobación nula
Respuesta
Si se refiere a que esto iría explosión:
int[] array = null;
for (int x : array) {
}
... entonces creo que es del todo adecuado para esa lanzar una NullPointerException
. La alternativa sería que trague silenciosamente el nulo y lo considere equivalente a un conjunto vacío. Ese no es el enfoque que Java toma en ningún otro lado: ¿por qué debería ser diferente? Haría que el lenguaje fuera inconsistente.
El único lugar me gustaría que eran manejo más (pero la manipulación explícita) es cambiar de una enumeración - sería agradable ser capaz de proporcionar un caso para nulo, para evitar la comprobación de que un valor especial de antemano. Pero esa es una construcción muy diferente, que trata específicamente de tomar diferentes acciones para diferentes valores.
Un caso 'nulo' para encender enums es un tema interesante idea, pero lo que debería suceder si tiene un 'default:' pero no un 'case null:' explícito y el valor enum es 'null'. Si el 'nulo' va al caso predeterminado que rompe la compatibilidad hacia atrás, y es malo si' nulo' es un valor erróneo. Si obtiene un NPE, entonces 'default' se comporta de una manera semánticamente inconsistente. (Ahora significa "predeterminado a menos que sea nulo ...") –
@Stephen C: Buenas preguntas. No estoy seguro de que sea una buena idea presentarlo * ahora *, pero creo que hubiera sido bueno considerarlo cuando se presentó la función por primera vez. –
Creo que hay suficientes "arrugas" que (hipotéticamente) habría sido una mala idea incluso entonces. Tal vez si Java 1.0 también hubiera tenido tipeo con nulos ... –
Tengo miedo de afirmar contra Jon Skeet ...: | ... Pero qué diablos ... ¿qué opinas sobre este escenario ?:
`
findMoney(List<Places> places){
int money = 0;
for(Place place : places){
money += searchWithCare(place);
}
return money;
}
`
Si le pido a algún cliente que me diga dónde buscar y él no me dice nada ¿Crees que es mejor lanzar una NullPointerException? Puede administrar la llamada a este método así que si el parámetro es nulo, ¿no lo llama? .... Creo que return 0 es una respuesta consistente porque no hay error aquí. Creo que se hacen excepciones para administrar el flujo de código y no veo por qué debería cambiar el flujo en este tipo de situación. Devolver un cero o incluso un nulo podría ser una buena respuesta, ¿no podría ser?
¿Qué tal esta solución? `
findMoney(List<Places> places){
int money = 0;
for(Place place : places == null ?Collections.<Place>emptyList():places){
money += searchWithCare(place);
}
return money;
}
`
Esto fue realmente útil. Nunca he visto las 'Colecciones.
¡Estaba intentando encontrarlo! No pude ... es un ... secreto? :) Lo siento –
Oh, bueno, gracias por intentarlo de todos modos. Es difícil de buscar. –
El código debe ser como este:
for (AnyObject anyObject : checkIsEmpty(anyObjectList)) {
System.out.println(anyObject.doSomething());
}
private <T> Iterable<T> checkIsEmpty(Iterable<T> iterable) {
return iterable == null ? Collections.<T>emptyList() : iterable;
}
- 1. ¿Cuál es la sintaxis de Enhanced for loop en Java?
- 2. ¿Por qué C++ no admite varios inicializadores en for loop?
- 3. java for loop no funciona
- 4. For-Each Loop AS3: ¿Está garantizada la dirección?
- 5. ¿Está garantizada la orden de enumeración for-loop de NSArray?
- 6. A for loop sin {}
- 7. ¿Por qué falla esta comprobación de matriz asociativa nula en PL/SQL?
- 8. fork() en for() loop
- 9. For-loop vs while loop en R
- 10. C# - For-loop internals
- 11. optimización for-loop - ¿es necesario o no?
- 12. Optimice JSonArray for Loop
- 13. javascript/jQuery - For Loop
- 14. Dangerous for loop idiom?
- 15. ¿Por qué mi loop de Perl está apagado al final?
- 16. JavaScript for loop index raregeness
- 17. Parallel for-loop en Windows
- 18. Ruby for loop a trap?
- 19. C# Comprobación nula de objeto
- 20. django for loop counter break
- 21. Comprobación nula en un bucle forzado mejorado
- 22. ¿Por qué no puedo usar Unix Nohup con Bash For-loop?
- 23. ¿Por qué la referencia nula se imprime como "nula"
- 24. for-loop, incremento en doble
- 25. "for" loop in velocity template
- 26. Python for-loop look-ahead
- 27. Infinite for loop en Python
- 28. Error Javascript no bien formado en for loop
- 29. Método de extensión de comprobación nula
- 30. 'for' loop vs Qt's 'foreach' en C++
¿Puede especificar algunos detalles más sobre su código y lo que está haciendo? –
Imagino que la pregunta es por qué 'for (X y: (Lista) null) {...}' está lanzando un NPE ... –
duplicado de http://stackoverflow.com/questions/2250031 –