Genericsが邪魔

このエントリの中に『Genericsは失敗だった』という話が出てきます。この『失敗』の文脈からは外れるかもしれませんが、Beans Bindingを使っていると、Genericsを邪魔に感じることが非常に多いです。

Beans Bindingで、バインディングの根幹になるorg.jdesktop.binding.Bindingのクラス定義は以下です。

public abstract class Binding<SS, SV, TS, TV>

このクラスは、SS型のオブジェクトが持つSV型のプロパティと、TS型のオブジェクトが持つTV型のプロパティをバインドします。Genericsのおかげで型を特定できて便利!…な訳ないですね。Bindingを作るたびに4つもの型を考えないといけなくて、うざいことこの上ないです。

Swingコンポーネントとのバインディングを作成するユーティリティクラスorg.jdesktop.swingbinding.SwingBindingsのメソッドは、以下のような調子。

public static <E, SS, TS> JTableBinding<E, SS, TS> createJTableBinding(
    AutoBinding.UpdateStrategy strategy, SS sourceObject,
    Property<SS, List<E>> sourceListProperty, TS targetObject,
    Property<TS, ? extends JTable> targetJTableProperty);

もう何がなんだか。結局Genericsには付き合いきれなくなって、@SuppressWarnings("unchecked")で完全無視してしまいます。

個人的には、バインディング、コンバータ、バリデータ辺りのフレームワークGenericsは不要だと思っているんですけど、どうなんでしょうね。