2011-03-09 9 views

Respuesta

21

Absolutamente, puede recuperar la excepción interna (la "causa") usando Throwable.getCause(). Para crear una excepción con una causa, simplemente páselo al constructor. (La mayoría de las excepciones tener un constructor de aceptar una causa, donde tiene sentido.)

5

Desde Java 1.4, java.lang.Throwable tiene constructores que toman otra Throwable como parámetro, y un método getCause() que lo devuelve. Casi todas las excepciones en la API estándar y la mayoría de las implementadas en otras bibliotecas hacen uso de esta función.

+0

"Prácticamente todas las excepciones en la API estándar y la mayoría de las implementadas en otras bibliotecas hacen uso de esta función". . ¿Puedes dar un ejemplo que carece de un constructor que tenga un throwable? Pensé que todas las excepciones estándar tienen un constructor de encadenamiento. – Geek

1

Todas las excepciones se pueden encadenar en Java. Esto significa que puede lanzar una excepción y proporcionar otra excepción (de hecho, desechable) como causa de la excepción que está lanzando. Mira el javadoc for Exception.

6

Puede establecer la excepción interna (como la causa) de dos maneras. Si está instanciando usted mismo la excepción, pase la excepción interna al constructor de la excepción (externa), p.

try { 
    // some code that throws innerException 
} catch (Exception innerException) { 
    throw new OuterException(innerException); 
} 

Por otro lado, si la excepción exterior no tiene un constructor que le permite establecer la excepción interna, o no lo crea la excepción exterior a sí mismo, se puede establecer usando

outerException.initCause(innerException); 
Cuestiones relacionadas