Un método debería ser solo throws
una excepción si puede ofrecer garantías razonables sobre el estado del objeto, los parámetros pasados al método y cualquier otro objeto sobre el que actúe el método. Por ejemplo, un método que se supone que recupera de una colección un elemento que la persona que llama espera contener en él podría ser throws
una excepción marcada si el elemento que se esperaba que existiera en la colección, no lo hace. Una persona que llama que detecta esa excepción debe esperar que la colección no contenga el artículo en cuestión.
Nota que mientras Java permitirá excepciones a burbuja comprobado a través de un método que se declara como lanzar excepciones de los tipos apropiados, tal uso debe generalmente ser considerado como un anti-patrón. Imagine, por ejemplo, que algún método LookAtSky()
se declara como llamando al FullMoonException
, y se espera que lo arroje cuando la Luna está llena; imaginemos además, que LookAtSky()
llama a ExamineJupiter()
, que también se declara como throws FullMoonException
. Si FullMoonException
fuera lanzado por ExamineJupiter()
, y si LookAtSky()
no lo detecta y no lo maneja o lo envuelve en algún otro tipo de excepción, el código que llama a LookAtSky
supondría que la excepción fue el resultado de que la luna de la Tierra está llena; no tendría ni idea de que una de las lunas de Júpiter podría ser la culpable.
Las excepciones que una persona que llama puede esperar manejar (incluyendo esencialmente todas las excepciones marcadas) solo deben permitirse filtrar a través de un método si la excepción significará lo mismo para la persona que llama como para el método llamado. Si el código llama a un método que se declara como arrojando alguna excepción marcada, pero la persona que llama no espera que arroje esa excepción en la práctica (por ejemplo, porque cree que es un argumento de método previamente validado), la excepción marcada debe ser capturada y ajustada en algún tipo de excepción sin marcar. Si la persona que llama no espera lanzar la excepción, la persona que llama no puede esperar que tenga un significado particular.
Siempre he sido fanático de "Si tiene sentido tratar con esto aquí ... entonces hágalo". – CheesePls
Me gustaría que todas mis excepciones se solucionen donde ocurren, así no tengo que lidiar con el futuro. –