1.5から本気出す
なるほどー.
やっぱり「Object型をTにすればgenerics対応じゃね?俺頭よくね?」という感じだったのですな.
そしてうまくいかなかったから「1.5から本気出す」とも.
こんな対応でいいのならSwingはとっくにGenerics対応してましたね.
どうせソースコードレベルで互換性取れてないんだしコンポーネントとの分離というのはさっさとやったほうがいいと思うんだけどなぁ.
たとえば
Label<String> label = new Label<String>();
ってのは別に悪くないと思うんですよ.基底クラスとしての動きとしては.でもそれをユーザー(ここでは開発者)に強要するような形になってしまっている.
StringとかIntegerとかよく使うコンポーネントはそういうコンポーネント用意したほうがいいんですよね.
過去にも書いてますけどこういうのは
public class StringLabel extends Label<String>{ }
と宣言しておいて
StringLabel label = new StringLabel();
とでも使えばよい.Modelを直接格納するのがWicketスタイルだろうけどModelを毎回意識させるのはgenericsではない.それがいやならJSFのようにすべてStringにしてコンバータを用意するという考え方が必要になってくる.まぁJavaコードで普通にかけるということでどっちも対応できるのがWicketのいいところだと思うけど.
genericsってのはライブラリやフレームワーク,拡張するためのコンポーネント開発者に対して提供するためのものであってユーザーに直接触らせるような技術じゃないよね.たまたまコレクション系は格納したいオブジェクトに予想がつきにくいのと動作がわかりやすいから素の状態で使ったほうが効率がよいだけであって.
Genericsの塊であるGoogle Guiceもユーザーは基本的にGenericsを意識して触る必要はないよね.必要なのは特別な挙動が必要なProviderやTypeLiteralくらいでしょ.
とりあえず1.5待ちってところだろうね.しかし,互換性がなくていいのなら2.0プラン復活させればいいのに.
一方でJavaSEやJavaEEの技術って基本的に互換性100%に限りなく近い状態で拡張している.これだけ膨大なライブラリであるにもかかわらず.すごいよなぁ.