6

私はこのテクニックを頻繁に使用しますが、何と呼ぶか​​わかりません。私はそれを結合列挙型と呼んでいます。あれは正しいですか?

例:

public enum Genders {

    Male("M"), Female("F"), Transgender("T"), Other("O"), Unknown("U");

    private String code;

    Genders(String code) {
        this.code = code;
    }

    public String getCode() {
        return code;
    }

    public static Genders get(String code) {
        for (Genders gender : values()) {
            if (gender.getCode().equalsIgnoreCase(code)) {
                return gender;
            }
        }
        return null;
    }
}
4

3 に答える 3

3

これを行うための一連のクラスがありますが、それ以外の名前はありませんEncodable

interface Encodable<T>{
    T getCode();
}

public class EnumUtils{

      public static <U, T extends Enum<T> & Encodable<U>> T getValueOf(
            @Nonnull Class<T> enumClass,
            @Nullable U code){

            for (T e : enumClass.getEnumConstants()){
               if (Objects.equal(e.getCode(), code))
                  return e;
            }

            throw new IllegalArgumentException("No enum found for " + code);
      }
}
于 2012-06-11T21:27:40.390 に答える
2

マルチトンパターンにかなり似ていると思います。erikbが提案するように実行し、ループする代わりにマップを使用する場合、それはマルチトンパターンとまったく同じだと思います。

于 2012-06-11T21:38:30.843 に答える
1

非常にシンプルなパーサーだと思います。

于 2012-06-11T21:29:30.137 に答える