Siamo spiacenti, no, non esiste un modo programmatico semplice per determinare quale variabile o chiamata di metodo è la fonte dell'eccezione. Potresti usare qualcosa come Aspect-Oriented Programming (AOP), ad es. AspectJ, ma questo non è inerente alla lingua e non è generalmente incorporato in un programma semplicemente per scopi di debug.
if (var==null) -> too much work
try { } catch() { }
Debugger
So che non vuoi sentire questo, ma queste sono semplicemente il costo di fare business.
if (this.superSL.items.get(name).getSource().compareTo(VIsualShoppingList.Source_EXTRA)==0) {
È insolito vedere così tante chiamate di metodo messe insieme. Credo che la cosa migliore da fare sia prendere l'abitudine di suddividerle di più - non necessario fino a 1 chiamata per linea, ma meno di questa. Perché?
1) Correctness
- è valido nella progettazione di una di queste chiamate per restituire null?Se è così, dovresti romperlo, testarlo e gestirlo in modo appropriato.
2) Understandability
- sarebbe più facile per i manutentori future (compresi futuro si) per capire se si intermedie, variabili ben chiamati a contribuire a chiarire ciò che sta accadendo su questa linea.
3) Efficiency
- di solito quando si va così in profondità in un grafico (mettendo insieme una serie di chiamate di metodo), è probabile che sia necessario tornare indietro più tardi. Catturare questo valore intermedio in una variabile intermedia significa evitare di ripetere una o più chiamate di metodo.
4) Debugging
- come indicato dalla tua domanda, splittando una linea complessa come questa semplifica il debug. restringendo la possibile fonte dell'eccezione.
fonte
2010-04-19 14:31:32
Hm, sarebbe più facile trovare il NullPointerException se questo non era 't un one-liner. È davvero difficile seguire questo codice. –
Considerando le tue opzioni, vorrei solo sottolineare che "troppo lavoro" potrebbe effettivamente significare molto meno lavoro a lungo termine. –
Trasformalo in un blocco corretto. Troverai il problema in pochissimo tempo. – Geo