EnumSetの使い方
EnumSet をあまり見かけないのでC/C++のコードの代替案で提案。
C/C++などでよく扱うタイプの記述。
#define BIT(b) (1<<b) typedef enum { POISON = BIT(0), PARALYSIS = BIT(1), CONFUSION = BIT(2), } Status; Status status; FLAG_ON( status, POISON ); // 毒ビットを立てる
if( FLAG_CHECK( status, POISON ) ) {
if( IS_FLAG_ON( status, POISON ) ) { // もしその状態ならばごにょごにょ }
JavaでのEnumSet
enum Status { Poison, Paralysis, Confusion, } EnumSet<Status> status = EnumSet.noneOf( Status.class ); status.add( Status.Poison ); if( status.contains( Status.Poison ) ) { // もしその状態ならばごにょごにょ }
パフォーマンスを見ても最適化されているのでビット演算と遜色なく安全。
final int POISON = (1<<0);
などとしている人はみな置き換えられる筈だ。(J2SE 5.0ならね)
Typesafe enum は偉大だと感じる。