■ EnumSet
* ビット和なフラグを使いたい時に使用
サンプル
CountryType.javaimport java.util.EnumSet; public enum CountryType { None, JAPAN, CHINA, INDIA, USA, MEXICO, UK, ITALY, FRENCH, BRAZIL; private static EnumSet<CountryType> asias; static { asias = EnumSet.of( CountryType.JAPAN, CountryType.CHINA, CountryType.INDIA); } public boolean isAsia() { return asias.contains(this); } }Main.java
public class Main { public static void main(String[] args) { System.out.println("USA is Asia? : " + CountryType.USA.isAsia()); System.out.println("JAPAN is Asia? : " + CountryType.JAPAN.isAsia()); } }出力結果
USA is Asia? : false JAPAN is Asia? : true
補足:EnumSetを初期化時に何も入れたくない場合
* EnumSet.noneOf(XXXXX.class)を使うimport java.util.EnumSet; import java.util.Set; public class Main { public static void main(String[] args) { Set<CountryType> flag = EnumSet.noneOf(CountryType.class); flag.add(CountryType.FRENCH); } }
■ EnumMap
* 列挙定数に対して値をセットして使いたい場合に使用する
サンプル
MonthType.java
import java.util.EnumMap; public enum MonthType { None, JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER; private static EnumMap<MonthType, Integer> enums; static { enums = new EnumMap<MonthType, Integer>(MonthType.class); int value = 0; for(MonthType resultEnum : MonthType.values()){ enums.put(resultEnum, value); value++; } } public Integer getValue() { return enums.get(this); } }
Main.java
public class Main { public static void main(String[] args) { System.out.println("JANUARY : " + MonthType.JANUARY.getValue()); System.out.println("MARCH : " + MonthType.MARCH.getValue()); } }
出力結果
JANUARY : 1 MARCH : 3
参考文献
http://fernweh.jp/b/java-enumeration/http://www.atmarkit.co.jp/ait/articles/1103/03/news107_3.html
http://www.ibm.com/developerworks/jp/java/library/j-tiger04195/
http://www.techscore.com/tech/Java/JavaSE/JavaLanguage/4-3/
http://qiita.com/endrugus/items/747c42b813ff9d3a9274