Perché il ciclo perfezionato per non esegue il controllo Null prima di ripetere l'iterazione sulla raccolta.Perché il ciclo avanzato non esegue il controllo nullo
risposta
Se vuoi dire che questo sarebbe andato botto:
int[] array = null;
for (int x : array) {
}
... allora penso che sia del tutto appropriato per quella di gettare un NullPointerException
. L'alternativa sarebbe quella di inghiottire silenziosamente il null e trattarlo come equivalente a un array vuoto. Questo non è l'approccio che Java usa altrove: perché dovrebbe essere diverso? Renderebbe la lingua incoerente.
L'unico posto in cui mi piacerebbe che ci erano più maneggevolezza (ma movimentazione esplicito) sta passando su un enum - sarebbe bello essere in grado di fornire un caso per nulla, al fine di evitare il controllo per che un valore speciale in anticipo. Ma questo è un costrutto molto diverso, che sta specificatamente cercando di intraprendere azioni diverse per valori diversi.
Un caso 'null' per l'attivazione di enumerazioni è interessante idea, ma cosa dovrebbe accadere se si ha un 'default:' ma nessun 'caso nullo esplicito: 'e il valore enum è' null'. Se 'null' va al caso predefinito che interrompe la compatibilità con le versioni precedenti, ed è cattivo se' null' è un valore errato. Se ottieni un NPE, allora 'default' si comporta in modo semanticamente incoerente. (Ora significa "predefinito a meno che non sia null ...") –
@Stephen C: buone domande. Non sono sicuro che sia una buona idea presentarlo * ora *, ma penso che sarebbe stato opportuno prendere in considerazione quando la funzionalità è stata introdotta per la prima volta. –
Penso che ci siano abbastanza "rughe" che sarebbe (ipoteticamente) una cattiva idea anche allora. Forse se Java 1.0 avesse avuto anche tune nullable ... –
Ho paura di affermare contro Jon Skeet ...: | ... Ma che diavolo ... cosa ne pensi su questo scenario ?:
`
findMoney(List<Places> places){
int money = 0;
for(Place place : places){
money += searchWithCare(place);
}
return money;
}
`
Se chiedo qualche cliente di dirmi dove cercare e lui non mi dice niente Pensi che sia meglio qui lanciare una NullPointerException? Può essere gestita la chiamata a questo metodo quindi se il parametro è nullo non lo si chiama? .... Penso che il ritorno 0 sia una risposta consistente perché non ci sono errori qui. Credo che siano fatte eccezioni per gestire il flusso di codice e non vedo perché dovrei cambiare il flusso in questo tipo di situazione. Restituire un cero o anche un null potrebbe essere una buona risposta, non potrebbe essere?
Quindi, per quanto riguarda questa soluzione? `
findMoney(List<Places> places){
int money = 0;
for(Place place : places == null ?Collections.<Place>emptyList():places){
money += searchWithCare(place);
}
return money;
}
`
Questo è stato davvero utile. Non ho mai visto le 'Collezioni.
Stavo cercando di trovarlo! Non potrei ... è un .. segreto? :) Scusa –
Oh bene, grazie per aver provato comunque. È difficile da cercare. –
Il codice deve essere simile a questo:
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. ciclo avanzato Java: cosa viene (non) valutato nell'intestazione del ciclo?
- 2. Ciclo con statoT: perché questo ciclo non fa il ciclo
- 3. Perché non possiamo eseguire il ciclo su `...`?
- 4. il modo migliore per il controllo nullo in kotlin?
- 5. Perché il mio iteratore è di nuovo avanzato?
- 6. perché il ciclo non accetta direttamente il valore booleano?
- 7. Tridion ASCX DCP non esegue il rendering del controllo figlio
- 8. Perché il blocco anziché il ciclo?
- 9. Perché il mio vincolo di controllo non blocca questo inserto nullo?
- 10. Il ciclo non iterare
- 11. Come si esegue il ciclo di un controllo per la stringa in un documento in Javascript?
- 12. Controllo avanzato del parser ricorsivo in scala
- 13. Perché il globale è nullo in funzione?
- 14. Il campo readonly inizializzato è nullo, perché?
- 15. Perché C# non consente il blocco di un valore nullo?
- 16. Perché questa costante Float è nullo quando si esegue il blocco statico?
- 17. Perché strncpy non è nullo?
- 18. esegue il ciclo grande con thread paralleli in CLI PHP
- 19. Esegue il ciclo di testo segnaposto in forma con JQuery?
- 20. Perché Moq non esegue il metodo ToString sottoposto a override?
- 21. Come riempire l'array bidimensionale utilizzando il loop avanzato di java?
- 22. Come si esegue il ciclo di un array multidimensionale?
- 23. esegue il debug di un grosso ciclo in eclissi
- 24. Il valore cast per il tipo "Decimal" non è riuscito perché il valore materializzato è nullo
- 25. Perché il ciclo for non funziona sulle mie proprietà Javascript?
- 26. Char Array - Perché il ciclo non è infinito?
- 27. Perché il tempo di esecuzione del ciclo for non cambia?
- 28. Perché il resharper esegue la seguente raccomandazione?
- 29. Metodo di estensione controllo nullo
- 30. Perché questo controllo per array associativo nullo in PL/SQL non riesce?
è possibile specificare alcuni dettagli circa il codice e quello che stai facendo? –
Immagino che la domanda riguardi perché 'per (X y: (Lista) null) {...}' sta lanciando un NPE ... –
duplicato di http://stackoverflow.com/questions/2250031 –