Nunca antes hice una codificación seria de Java, pero aprendí la sintaxis, las bibliotecas y los conceptos basados en mis habilidades existentes (Delphi & C #). Una cosa que apenas entiendo es que he visto tanto código que silenciosamente consume excepciones después de printStackTrace
esto:
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
e.printStackTrace();
}
}
Hay un código similar como este en casi todos los artículos y proyectos de Java con los que me encontré. Según mi conocimiento, esto es muy malo. La excepción casi siempre debería reenviarse al contexto externo como este:
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
e.printStackTrace();
throw new AssertionError(e);
}
}
La mayoría de las veces, la excepción debería terminar manejándose en el bucle más externo que pertenece al marco subyacente (Java Swing, por ejemplo). ¿Por qué parece la norma codificar así en el mundo Java? Estoy confundido.
Según mis antecedentes, preferiría eliminar printStackTrace por completo . Simplemente lo volvería a lanzar como un aka no controlado RuntimeException
(o, mejor aún, AssertionError
), luego lo capturaría y lo registraría en el lugar más apropiado: el bucle más externo del marco.
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
throw new AssertionError(e);
}
}