BeansBindingとDxO

BeansBindingはJavaBeans間であれば、型が違うプロパティもバインドすることができる。その際に基本的な型の変換は自動的に行ってくれるが、それ以外はプロパティの型を変換するためのコンバータを設定する必要がある。

Binding binding = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE
    , Person
    , ELProperty.create("${marriage}")
    , chkMarriage
    , BeanProperty.create("selected"));
binding.setConverter(MarriageConverter);

Binding#setConverterのパラメタはorg.jdesktop.beansbinding.Converter抽象クラスであり、以下の二つのメソッドを実装することでバインドされたプロパティの双方向変換を行う。

public abstract T convertForward(S value);
public abstract S convertReverse(T value);

基本的なコンバータの実装は既にorg.jdesktop.beansbinding.Converter中に定義されている(Bindingクラスはこの機能を使って可能な場合は変換を自動的に行う)が、自分で独自のコンバータを実装しても良いのだ。

と、私はここで軽いデジャヴに囚われた。これはDxO機能そのものではないか。

  • DxOのIConverterインタフェース
public interface IConverter {
    void convert(S source, D dest);
    D convert(S source, Class destType);
}

やりたいことは同じなので、DxOと統合してしまえばよいのだが、org.jdesktop.beansbinding.Converterはインタフェースでは無いので(この辺がJavaらしい)継承するか、ラッパを作るしかないのが勿体無い。