[seasar-dev:1193] Re: S2Util
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2010年 8月 23日 (月) 22:00:00 JST
小林 (koichik) です.
例外クラスを org.seasar.util パッケージに移動しました.
例外クラスのいくつかは MessageFormatter を利用して
メッセージを組み立てるため,
SRuntimeException(String messageCode, Object[] args)
のようなコンストラクタを持っていたのですが,
これを可変長配列に修正しました.
SRuntimeException(String messageCode, Object... args)
そうすると,原因となった例外を受け取るコンストラクタ
SRuntimeException(String messageCode, Object[] args, Throwable cause)
の扱いに困ったので,このコンストラクタは【削除】
しました.
throw new SRuntimeException("EUTL0000", a, b).initCause(e);
とすればいいかなと.
ただ initCause() の戻り値型は Throwable なので,
(checked な例外の場合) そのままだとキャストが
必要になってしまうので,共変な戻り値型のメソッド
@Override
public SRuntimeException initCause(Throwable cause) {
return (SRuntimeException) super.initCause(cause);
}
を定義しました.
これでキャストも不要♪
...
って喜んでいいのか微妙.
そこまでして可変長引数にすべきだったのか?
という疑問が残ります.
利用するコードを比べると,
Seasar2
throw new SRuntimeException("EUTL0000", new Object[] {a, b}, e);
S2Util
throw new SRuntimeException("EUTL0000", a, b).initCause(e);
メッセージに例外を含める場合は
Seasar2
throw new SRuntimeException("EUTL0000", new Object[] {a, b, e}, e);
S2Util
throw new SRuntimeException("EUTL0000", a, b, e).initCause(e);
悪くはない...のか?
どう思いますか?
--
<component name="koichik">
<property name="fullName">"Koichi Kobayashi"</property>
<property name="email">"[E-MAIL ADDRESS DELETED]"</property>
<property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>
Seasar-dev メーリングリストの案内