[seasar-dev:1172] Re: Seasar2.5
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2010年 8月 10日 (火) 16:00:27 JST
小林 (koichik) です.
Date: Mon, 09 Aug 2010 15:23:09 +0900
From: Toshihiro Nakamura <[E-MAIL ADDRESS DELETED]>
To: [E-MAIL ADDRESS DELETED]
Subject: [seasar-dev:1169] Re: Seasar2.5
> > 互換性をどれだけ考慮するかもポイントになりますかね.
> > API に手を加えるのが前提で互換性重視ってのは辛いと
> > 思いますが...
>
> 互換性重視派です。
>
> できれば、関連プロダクトがSeasar2.5専用の
> バージョンを作らなくても2.4で動いていたものが
> そのまま動いてくれるとうれしいです。
それはそれで悩ましくて,例えば S2Container の
Object getComponent(Object componentKey)
をバイナリ互換性を保ったまま generics 対応すると,
<T> T getComponent(Object componentKey)
としかできなくて,利用者はキャストこそ不要に
なるものの,
Foo foo = container.getComponent(Bar.class);
とやってもコンパイルエラーにならないという
中途半端な API になってしまいます.
generics 対応するなら,メソッドを二つにして
<T> T getComponent(Class<T> componentClass)
<T> T getComponent(String componentName)
としたいところです.
これなら上記の例はコンパイラでチェックされますが,
バイナリ互換性は失われるので (ソース互換性はある),
getComponent(Object) を呼び出しているプロダクトは
リコンパイルが必要となります.
そんなわけで (どんなわけで?),互換性を重視すると
Java5/6 対応が中途半端になる可能性がありますが,
・中途半端になるならやらない
・中途半端でもいいからやる
・多少の互換性を失ってもいいからちゃんと対応する
といった選択肢があるかと思います.
--
<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 メーリングリストの案内