[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 メーリングリストの案内