2012-01-17 18 views
7

Quiero establecer un mensaje de excepción personalizado, pero no estoy seguro de cómo hacerlo. ¿Tendré que crear una clase de excepción personalizada o hay una forma más fácil de hacerlo?¿Cómo puedo configurar el mensaje en una excepción en JAVA?

Lo siento con antelación si esta es una pregunta simple, sin embargo he estado buscando en línea y no he tenido mucha suerte.

+2

Incluso java.lang.Exception (http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Exception.html) tiene un constructor con una cadena. – anubhava

Respuesta

9

Bueno, si la API ofrece una excepción que se adapte a sus necesidades (IllegalArgumentException, por ejemplo), simplemente utilícela y pase su mensaje al constructor.

21

mayoría de las clases de excepción estándar proporcionan un constructor que toma un mesage, por ejemplo:

public UnsupportedOperationException(String message) { 
    super(message); 
} 

la clase anterior, simplemente llama al constructor de su matriz, que llama al constructor de su padre, y así sucesivamente, culminando finalmente en:

public Throwable(String message) { 
    ... 
} 

Si crea su propia clase de excepción, creo que es una buena idea seguir esta convención.

2

El mejor enfoque es envolver la excepción.

try { 
    my code that throws E; 
} catch (final E e) { 
    throw new MyE("my message", e); 
} 
1

La clase de excepciones (Su padre, en realidad - Throwable) realiza un mensaje como un argumento en su constructor

tiro nueva excepción ("mensaje")/Excepción ("mensaje", InnerException);

1

La clase raíz Exception acepta un mensaje personalizado , al igual que (hasta donde sé) todas las clases derivadas.

Entonces, no, no necesita crear una clase personalizada. Una de las excepciones existentes probablemente cubre su caso (lea sus descripciones para averiguar cuál). Si ninguno de ellos es realmente satisfactorio, puede crear una extensión de Exception (o RuntimeException, etc.) y mantener el constructor de mensajes personalizado.

7

Solo puede establecer el mensaje en la creación de la excepción. Aquí hay un ejemplo si desea configurarlo después de la creación.

public class BusinessException extends RuntimeException{ 

    private Collection<String> messages; 

    public BusinessException(String msg){ 
     super(msg); 
    } 


    public BusinessException(String msg, Exception cause){ 
     super(msg, cause); 
    } 


    public BusinessException(Collection<String> messages){ 
     super(); 
     this.messages= messages; 
    } 


    public BusinessException (Collection<String> messages, Exception cause){ 
     super(cause); 
     this.messages= messages; 
    } 

    @Override 
    public String getMessage(){ 
     String msg; 

     if(this.messages!=null && !this.messages.isEmpty()){ 
      msg="["; 

      for(String message : this.messages){ 
       msg+=message+","; 
      } 

      msg= StringUtils.removeEnd(msg, ",")+"]"; 

     }else msg= super.getMessage(); 

     return msg; 
    } 

} 
0

Prueba este código

 try{ 
      throw new Exception("Bad String"); 
     }catch(Exception ex){ 
      System.out.println(ex.getMessage()); 
     } 
Cuestiones relacionadas