S2Dxoで列挙まだつづく

ConverterFactoryImplのgetDistance(Class, Class, double)の中で、列挙用にランク付けをしてみる。

private double getDistance(final Class assigner, final Class assignee,
        final double distance) {
    if (assignee.equals(assigner)) {
        return distance;
    }
    //これ追加
    if(assigner.equals(Enum.class) && assignee.isEnum()){
        return distance + 0.5;
    }
    
    if (isImplements(assigner, assignee)) {
        return distance + 0.5;
    }

    final Class superClass = assigner.getSuperclass();
    if (superClass == null) {
        return distance + 1;
    }
    return getDistance(superClass, assignee, distance + 1);
}

これで出来ました。

コンバータのgetDestClass()をEnum.classにしたものと、特定の列挙を指定した物と同時にテストしたんですが、distanceを +0.5にしたので、特定の列挙を決め打ちした奴に合致した場合はそっちが優先されました。

assignerをEnum.class限定にしたのは、全然違う列挙がgetDestClass()で指定された場合はもっと遠くに行って貰おうという事なんですが、考え方合ってるかな。

すぐ下のisImplements()の場合のポイントと同じ。距離感は一緒かなと思ったので。

ああ面白かった。