Crear excepción personalizada en Java

Excepciones en Java

Excepciones en Java


En esta entrada vamos a ver una funcionalidad muy necesaria en nuestros proyectos, como crear excepción personalizada en Java.

¿Por qué crear una excepción personalizada en Java?

En nuestras aplicaciones o proyectos en muchas ocasiones Java o el Framework que estemos utilizando, nos ofrece una amplia variedad de excepciones que controlan casi todas las situaciones. Pero se nos pueden dar situaciones en las que es necesario crear nuestras propias excepciones, por ejemplo, para lógica de negocio, o para envolver alguna excepción.

Tipos de excepciones en Java

Dentro de las excepciones en Java podemos encontrar:

  • Checked Exception: Una checked exception es aquella que debe ser capturada o declarada en el método que se lanza. Por ejmeplo java.io.IOException.
  • Unchecked Exception: Las unchecked exception son aquellas que pueden ocurrir en tiempo de ejecución o que no son capturadas, es decir, son aquellas que se pueden lanzar sin ser declaradas o que estén capturadas.

Por un lado vamos a ver la creación de checked y por otro lado la creación de unchecked exception.

Creación de una Checked Exception

Las excepciones de tipo checked son aquellas que son capturadas en el tiempo de desarrollo. Y para su creación tienen que extender de java.lang.Exception, vamos a ver un ejemplo:

public class AccountNumberNotFoundException extends Exception { 
    public AccountNumberNotFoundException  (String errorMessage) {
        super(errorMessage);
    }
}

Crear una checked exception es tan fácil como esto, le podemos pasar un string indicando el motivo del error, por ejemplo:

private Boolean getAccount (String accountNumber) {
 
  private AccountRepository accountRepository;

  if (null == accountRepository.findByAccountNumber(accountNumber)) {
   throw new AccountNumberNotFoundException  ("Incorrect accountNumber: " + accountNumber);

}  

}

En el fragmento de código anterior vemos que lanzamos la excepción en el momento de verificación de la longitud. Aunque tenemos el mensaje de error que le hemos añadido a la excepción, no tenemos la causa del error. Para solucionar esto podemos añadir java.lang.Throwable como parámetro de nuestra excepción:

public class AccountNumberNotFoundException extends Exception { 
    public AccountNumberNotFoundException (String errorMessage, Throwable error) {
        super(errorMessage, error);
    }
}

Creación de una Unchecked Exception personalizada en Java

Como hemos comentado anteriormente las unchecked exception son aquellas que pueden ocurrir en tiempo de ejecución, por lo que para crear este tipo de excepción se tiene que extender de runtime.

Por ejemplo vamos a lanzar una excepción en tiempo de ejecución cuando introduzcamos un accountNumber que sea inferior a 10 dígitos.

Para ello vamos a crear una excepción que se lance en tiempo de ejecución:

public class AccountNumberFormatException
  extends RuntimeException {
    public AccountNumberFormatException(String errorMessage, Throwable err) {
        super(errorMessage, err);
    }
}
private Boolean getAccount (String accountNumber) {
 
  private AccountRepository accountRepository;

  if (accountNumber.length() < 10 ) {
   throw new AccountNumberNotFoundException  ("Length must be more than 10 digits : " + accountNumber);

  }  
}

En este caso en el momento en el que se introduzca un accountNumber con una longitud inferior a 10, una excepción será lanzada en tiempo de ejecución.

Conclusión

En esta entrada sobre como crear excepción personalizada en Java, hemos visto como crear los dos tipos de excepciones que nos da Java. El conocer estas diferencias y como crearlas nos va a ayudar a tener más control sobre nuestras aplicaciones.

Si necesitas más información puedes escribirnos un comentario o un correo electrónico a refactorizando.web@gmail.com o también nos puedes contactar por nuestras redes sociales Facebook o twitter y te ayudaremos encantados!


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *