• ベストアンサー

enumの使い方

はじめまして。 J2SE5.0で導入されたenumキーワードですが、 http://oshiete1.goo.ne.jp/qa2252664.htmlの質問で定義方法は把握できたのですが、実際にどういったプログラムで使用するのでしょうか? いまいち実用性がイメージできないのでお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • neko_noko
  • ベストアンサー率45% (146/319)
回答No.2

曜日、月、年号などで使用されそうですね。 例えば、カレンダーで static final int Monday = 0; static final int Tuesday = 1; : static final int Sunday = 6; とあったとします。 これを使うクラスで、 int week; : Switch (week) { Case 6: //処理1 break; Case 5: //処理2 break; defaule: //処理3 } というコードがあったとして、「これが何をしているか」が直感的には分かりづらいと思いませんか? WeekNameというenumを定義した場合(定義内容は省略します) WeekName week; : Switch (week) { Case Sunday: //処理1 Case Saturday: //処理2 default: //処理3 } これなら、「土曜、日曜、それ以外で処理を変えている」というのがすぐに分かると思います。 また、曜日を格納する変数weekCodeを作った場合 int weekCode = 7; さて、weekCodeは何曜日でしょうか? このような値の代入を防ぐためのコードをいちいち書く必要がでます。 enumだとこのような値の代入はできません。 さらに言うと、上のコードでstatic finalな曜日の値を0から始めましたが、1から始める人もいるかもしれません。 また、月曜を始めにしましたが、日本のカレンダーの表記通りにすると、 日曜から始まるケースもあり、Sundayが0になります。 ただ、「文法的には」どちらでも問題ないので、このクラスを使う側が注意しないといけなくなります。 当然、バグが生まれやすくなります。 enumなら、Sundayは日曜であり、月曜にはなりません。

been2005
質問者

お礼

回答ありがとうございます! 値の保証がされるという部分がポイントになりそうですね。 一度確認してみます。

その他の回答 (1)

  • suzukikun
  • ベストアンサー率28% (372/1325)
回答No.1

良くあるパターンでは曜日を設定するときにstatic finalではなくenumにしておけば、次を求めたり入るものを規定できるので規定外値を防いだりできます。

参考URL:
http://www.02.246.ne.jp/~torutk/javahow2/enum.html
been2005
質問者

お礼

回答ありがとうございます! 参考URLも確認させて頂きます。

関連するQ&A