2016-08-30 41 views
1

爲什麼​​不提供消息的setter,並只允許通過構造函數設置它(例如super(_msg))?爲什麼java.lang.Exception不允許在構造函數外設置消息?

例如:

public BadParameterException(QueryParameter _param, String _valStr) { 

    this.param = _param; 
    this.valAsStr = _valStr; 
} 

public BadParameterException(QueryParameter _param, String _valStr, String _msg) { 

    this(_param, _valStr); 
    /* This is not possible */ super.setMessage(_msg); 
} 

相反,我必須這樣做:

public BadParameterException(QueryParameter _param, String _valStr, String _msg) { 

    super(_msg); 
    this.param = _param; 
    this.valAsStr = _valStr; 
} 

回答

8

因爲一個例外是的情況快照。它不應該改變它的狀態。

由於消息只能通過構造函數設置,因此基本上是final,之後無法更改。這就是它的設計。

相關問題