2012-01-17 10 views
7

Desidero impostare un messaggio di eccezione personalizzato, tuttavia non sono sicuro su come farlo. Devo creare una classe di eccezioni personalizzata o esiste un modo più semplice per farlo?Come posso impostare il messaggio su un'eccezione in JAVA?

Scusate in anticipo se questa è una domanda semplice, tuttavia mi sono guardato in giro online e non ho avuto molta fortuna.

+2

Anche java.lang.Exception (http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Exception.html) ha un costruttore con una stringa. – anubhava

risposta

9

Bene, se l'API offre un'eccezione adatta alle proprie esigenze (ad esempio IllegalArgumentException), è sufficiente utilizzarla e passare il messaggio nel costruttore.

21

La maggior parte delle classi di eccezioni standard, forniscono un costruttore che prende un mesage, ad esempio:

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

La classe sopra chiama semplicemente il costruttore del suo genitore, che chiama il costruttore di suo padre, e così via, in ultima analisi, si conclude con:

public Throwable(String message) { 
    ... 
} 

Se si crea la propria classe di eccezioni, penso che sia una buona idea seguire questa convenzione.

2

L'approccio migliore è quello di avvolgere l'eccezione.

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

La classe Exception (sua madre, in realtà - Throwable) batte un messaggio come un argomento nel suo costruttore

throw new Exception ("messaggio")/Exception ("messaggio", innerException);

1

La classe radice Exception accetta un messaggio personalizzato String, così come (per quanto posso dire) tutte le classi derivate.

Quindi: no, non è necessario creare una classe personalizzata. Una delle eccezioni esistenti probabilmente copre il tuo caso (leggi le loro descrizioni per scoprire quale). Se nessuno di questi è veramente soddisfacente, è possibile creare un'estensione di Exception (o RuntimeException ecc.) E mantenere il costruttore di messaggi personalizzato.

7

È possibile impostare il messaggio solo alla creazione dell'eccezione. Ecco un esempio se si desidera impostarlo dopo la creazione.

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

Prova questo codice

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