Ci sono dei costi di prestazioni creando, lanciare e catturare eccezioni in Java?Il costo delle prestazioni della codifica "sviluppo basato su eccezioni" in Java?
Sto pianificando di aggiungere "sviluppo guidato da eccezioni" in un progetto più ampio. Vorrei progettare le mie eccezioni e includerle nei miei metodi, costringendo gli sviluppatori a prendere e fare il lavoro appropriato.
Ad esempio, se si dispone di un metodo per ottenere un utente dal database in base a un nome.
public User getUser(String name);
Tuttavia, è possibile che l'utente potrebbe essere nullo ed è comune a dimenticare di controllare questo prima di utilizzare il metodo pubblico di un utente.
User user = getUser("adam");
int age = user.getAge();
che comporterebbe NullPointerException e un arresto anomalo. Tuttavia, se ho fatto un controllo, prima di tornare l'utente-oggetto, se nullo e genera un 'UserIsNullException':
public User getUser(String name) throws UserIsNullException;
forzo implementor di pensare e agire:
try {
User user = getUser("adam");
int age = user.getAge();
}catch(UserIsNullException e) {
}
Si fa il codice è molto più sicuro per arresti anomali e elimina più bug. Diciamo che il sito ha centinaia di visitatori all'ora e questo modello di design è usato praticamente ovunque.
In che modo un simile approccio al design influisce sulle prestazioni? I benefici fuori-pesano il costo o è semplicemente una cattiva programmazione?
Grazie per qualsiasi aiuto!
AGGIORNAMENTO! Per essere chiari, la mia attenzione non è quella di avvolgere una NullPointerException, come potrebbe suggerire il mio esempio. L'obiettivo è quello di forzare il realizzatore di scrivere un try/catch, salvare il mal di testa di un incidente vero e proprio dal momento che una:
utente == null
è stato dimenticato. La questione riguarda confronto questi due modelli di progettazione:
int age;
try {
User user = getUser("adam");
age = user.getAge();
}catch(UserIsNullException e) {
age = 0;
}
rispetto:
int age;
User user = getUser("adam");
if(user != null) {
age = user.getAge();
} else {
age = 0;
}
Gli oggetti nulli sono qualcosa che può esserti d'aiuto. Stavo leggendo il libro "Refactoring" di Martin Fowler l'altro giorno e descrive l'uso di un oggetto specifico che agisce nel luogo in cui si restituisce un null, evitando di dover controllare NULL per tutto il tempo. Avevo una rapida occhiata nel libro, è a pagina 260 "Introduci oggetto nullo", se ne hai una copia. Non proverò a spiegarlo qui come è descritto molto bene nel libro. – Tony
@Tony Penso che il tuo commento meriti di diventare una risposta completa :-) – KLE
@KLE: Grazie, ho pensato di metterlo come commento in quanto non è propriamente una risposta alla sua domanda, ma lo aggiungerò come rispondi anche tu – Tony