S2Dxoで列挙さらに続き

id:koichikさんにコメント戴きまして。有難う御座居ます。

教わったとおり、こんな感じで。

public Object convert(Object source, Class destClass,
        ConversionContext context) {
    
    if(source ==null){
        return null;
    }
    
    String srcStr = source.toString();
    
    for(Object e: destClass.getEnumConstants()){
        if(e.toString().equals(srcStr)){
            return e;
        }
    }
    return null;
}

わーできました!getEnumConstantsなんてメソッドがあったとは・・・これでEnum側でgetEnumFromなんてクラスメソッドを実装しないでいけますよ。

標準ではEnum#name()とEnum#toString()は戻り値同じだし、比較する文字列を変えたい時はtoString()をオーバーライドすると云う方針ならば、これはかなり汎用的に使えそうですね。

と思ったら、converterのgetDestClassの戻り値をEnum.classにして汎用的にしようと思ったら、ConverterFactoryImplのgetDistanceでBeanConverterよりランクが下になっちゃって、BeanConverterが優先されちゃいました。

getDistanceの中でisEnumとか使ってランキング(ってんですかね)のロジックをいじればよさそうな予感なんですが、うむむむ。