• ベストアンサー

enumの使い方

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

  • Java
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • 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

  • enum定義二つを常に同期させる方法を教えてください。

    実際疑問に思ったきっかけはBREWプログラミングなのですが、 基本的なプログラミングのノウハウとして回答を頂ければと思います。 前提として層が3層あり、以下のenum定義があるとします。 (アプリ層は必ず中間層を通してハード層へ要求をかけます。) 1.アプリ層 2.中間層(ハード層のラッパー関数)  typedef enum _MidSound {   MIDSOUND1 = 1,   …   MIDSOUND5,  } MidSound; 3.ハード層  typedef enum _HardSound {   HARDSOUND1 = 1,   …   HARDSOUND5, } HardSound; アプリは音の大きさを5段階で指定する事が出来るのですが、 ハード層の定義は使用しないのが基本だと思います。 しかし、今の実装のままではハード層の定義が 10段階になった場合、中間層を手作業で直さなくてはなりません。 これを解決させる為には中間層をどのような実装にすれば良いのでしょうか。 typedefかとも考えたのですが、どうも納得出来なかったため 出来れば仕組みも教えて頂ければ幸いです。

  • 検索サイトの反映

    さきほど質問したものです。 http://oshiete1.goo.ne.jp/qa2660528.html 何度もすみません。 まずタイトルの部分を検索しやすいようにキーワードを多く入れてみました。 それが検索サイトに反映するのはどのぐらい時間がかかるのでしょうか。 キーワードを入れて検索してみても、まだ自分のサイトがひっかかりません。

  • 生物の共通祖先(LUCA)とウイルスの関係

    去年nhk-hiの「進化の木」で全ての生物(真核生物、バクテリア、古細菌)の源は、特定のタンパク質を形成するという共通点をもったLUCAから進化したと言っていました。(LUCAがいた頃には他の生物もいたけれども、現在はLUCAの系統のみ存在するとも) それを見ていて、アレ、ウイルスはって思いました。 下記、参照URLにもあるように生物と無生物の境目とか、細胞が出来た後にウイルスが出来ないと、細胞を借りて増殖するウイルスは後発でないとおかしいとかいてありました。 でも、その細胞ってLUCAの本体や子孫でなくてもいいと思うので、LUCAや同世代以前に存在した細胞に感染すれば、問題ないので、今のウイルス以外の共通祖先が、現在の多細胞生物の細胞内小器官のミトコンドリアや葉緑体みたいにLUCA系以外の生物が生き残るための成りの果ての可能性もあると個人的には思っています。 そこでみなさんのに質問です。 1、そういう可能性はあるのか? 2、下記、参照URLにもあるのですが、ウイルスはトランスポゾンから進化した説の場合のウイルス誕生までの道筋。 3、ウイルスの「2」と異なった誕生までの道筋。 4、この質問に関連している「1」~「3」以外のもの。 以上、どれかで「ウイルス」ってこういうもの「由来」だったんだって、分かる回答をお願いします。 自分のウイルスのイメージ:大腸菌などのバクテリアに感染するバクテリオファージ、タンパク質の殻の中にDNAもしくはRNAの1本鎖を持つもの。これがイメージで、バクテリアの細胞膜に穴をあけて、DNAもしくはRNAのみが殻を残して侵入し、宿主であるバクテリアのDNA内に侵入して、自己の遺伝子やタンパク質の殻を大量生産させて、増殖する。(真核生物よりイメージしやすいから、特に) http://oshiete1.goo.ne.jp/qa1053128.html http://oshiete1.goo.ne.jp/qa2759179.html http://oshiete1.goo.ne.jp/qa3792638.html http://oshiete1.goo.ne.jp/qa3338400.html http://oshiete1.goo.ne.jp/qa3163072.html http://oshiete1.goo.ne.jp/qa611765.html http://oshiete1.goo.ne.jp/qa3018431.html http://oshiete1.goo.ne.jp/qa40144.html http://oshiete1.goo.ne.jp/qa5206492.html http://oshiete1.goo.ne.jp/qa4756920.html http://oshiete1.goo.ne.jp/qa2688780.html

  • DC-DCコンバータが動かない

    http://oshiete1.goo.ne.jp/qa3108547.htmlとhttp://oshiete1.goo.ne.jp/qa3166209.htmlでDC-DCコンバータについて教えていただき、 実際に製作してみたのですが、なぜか電源電圧がそのまま出力に出てきてしまいます。 回路自体は間違っていないと思います。原因は何なんでしょうか?

  • 死の定義について

    中絶、脳死、臓器移植、再生医療・・・ 今後ますます死の定義があやふやになっているようです。 矛盾や混乱が大きくならないうちに、人は死なないと定義してしまったらどうでしょう。 何か問題ありますか? http://oshiete1.goo.ne.jp/qa3350051.html

  • リストアできなくて困ってます。

     ウィルスに感染したため、リカバリしたいんですけど… 説明書の手順どおりにリカバリCDを入れても、それが開かずにリカバリすることができません。。 使ってるPCはemachinesのJ2950です。 先ほど、http://oshiete1.goo.ne.jp/qa3202254.htmlで同じ質問があったので実際にやろうとしたんですが、意味がわからなくてできませんでした。 どなたかわかる方、教えてください。 よろしくお願いします。

  • HPで本日の日付を英語で表示したいのです

    下記は日本語ですが、それと同様に英語のプログラムを探しています。なかなか見つかりません… http://oshiete1.goo.ne.jp/qa1010541.html ・April 13, 2009 ・09.13.Mon のどちらでも構いません。 宜しくお願いします。

  • Visual C++で作ったプログラムをブラウザ上で動かしたい

    Visual C++であるプログラムを作ろうと思っています。 (プログラム内容:http://oshiete1.goo.ne.jp/qa2455569.html) このC++で作ったプログラムをブラウザ上で動かしたいのですが、あまりおすすめできないと聞きます。それはなぜなのでしょうか?ブラウザ上で動くプログラムを作るにはやはりJavaやFLASHがいいのでしょうか?

  • hotmail 差出人をキーとして並べ替えたい

    Mac(OS10.3.9)を使用しています。 タイトルの通りなのですが、非常に困っています。 何か方法はありますでしょうか。 http://oshiete1.goo.ne.jp/qa3569336.html 以前に投稿した時のものです。 http://oshiete1.goo.ne.jp/qa3751925.html こちらの回答についていた方法を試しましたが、改善されませんでした。 http://oshiete1.goo.ne.jp/qa3167751.html こちらには普通の(?)Hotmailに戻せるとありますが、オプションページに「詳細オプション」という項目がありません。 (なお、オプションページトップには「Windows Live Hotmail の標準バージョンを使用しています。」と出ます)

  • Vistaでシステム構成ユーティリティをいじると、起動の時にバルーンが出る

    Win98SEからVista Home Basicに乗り換えた者です。 毎度おなじみのバルーンの質問で申し訳ありません。 長いので箇条書きで失礼します。 1)システム構成ユーティリティ(msconfig)でスタートアップ項目のチェックを外しました。 2)すると、起動時に毎回バルーンが出ます。これを切りたい。   内容は「スタートアッププログラムの一部がWindowsでブロックされています」 3)「ブロックされたプログラム」を見ると、「システム構成ユーティリティ」になっている。 4)つまり、自分で自分がブロックされたといっている? 5)98SEのときには2度と通知しないようにできたのですが、そのような項目がどこにあるのか判りません。   ●この項目があれば、教えて頂きたいのです。● ちなみに、以下の質問(XPのウイルス対策バルーン)などから類推して、 Windows Defenderあたりを切ってみたのですが、効果がありませんでした。 http://oshiete1.goo.ne.jp/qa1736213.html http://oshiete1.goo.ne.jp/qa1869467.html またVistaに慣れるまでは、バルーンを全く出ないようにするつもりがないので、 解決策がなければ無視するしかありませんね。 乱文ですみません。ご存知の方、お知恵をお貸しください。

専門家に質問してみよう