• 締切済み

enumについて

Java2 5.0で「enum」という列挙型が導入されてそうですが、 意味がよくわかりません。 今までは、interface等に (1) public final static int a = 0; public final static int b = 1; public final static int c = 2; などと、指定してきましたが、enumを使う事で、型に”安全”に なると書かれていますが、それもよくわかりません。 ”列挙値は、整数ではない”とも見たりしますが、(1)のよな使い方 をしなくなるのでしょうか。 いつどのような使い方するのか、どなたかご教示ください。 また、私のようなものに、合うようなサイトがあれば、教えてください。 宜しくお願いします。

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

みんなの回答

  • jikankou
  • ベストアンサー率38% (42/108)
回答No.2

enum はかなり面白いですよ。 型の安全性は#1さんの言っている通りかと思います。 でどのような使い方をするのか書いてみようとしましたが、 かなりいろいろ実験をされているので下記のURLでやっているので 参考になるかと思います。私が書こうとした以上のことをしてい るのでかなり参考になりました・・・。enumは分かるとかなり 使える道具ですね・・・思ったよりも。

参考URL:
http://www.javainthebox.net/laboratory/J2SE1.5/LangSpec/TypesafeEnum/TypesafeEnum.html
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

例えば、 enum MyTypes { A, B, C }; の様に使います。 後は、適当なスコープで、A,B,C それぞれが、定数名のような感じで使えます。 >enumを使う事で、型に”安全”になる 関数(A); 等とする時、 final static int A = 0 ; のようになっていたら、 関数(0); で同じ動作になってしまいますが、 それは、望まない動作なのかも知れません。 関数(enum 型); なら、型でチェックされるので、 関数(0); のような望まないものを排除できます。 (ということとかかな?) >”列挙値は、整数ではない”とも見たりしますが、 列挙型は、序数という形で順番の位置を持っていますが、 整数ではなくて、(内部的にどのように表現されているかには関係なく)種類を表すと考えるといいと思います。 >(1)のよな使い方をしなくなるのでしょうか。 例えば、円周率のようなモノ文字通り"定数"ですから public final static double pi = 3.14159265358979323; とかのように使うでしょう。 そういう意味でなくなったりはしません。

関連するQ&A

  • javaによるenum型の扱い

    最近javaに親しんできたのですが、 Cとjavaにおける列挙型の扱いの違いに困っています。 javaにおけるenumはクラスであり、 各要素にメソッドを追加できることは分かったのですが…… 例えば、Cにおけるenumは確か、 typedef enum{EAST,SOUTH,WEST,NORTH} dirT; //定義 -------- (略) -------- dirT dir=EAST; //宣言・dirに要素EASTを格納 というようなことが出来たと思いますが、 javaはenumもクラスで、さらにnewでメモリ確保できないと聞きました。 つまり、このように列挙型の保持はできないということになるのでしょうか。 結局やりたいこととしては、このように「保持してある」列挙型に対して 条件分岐処理をしたいと考えています。 説明が上手くできず伝わりにくいかと思いますが、 どうか回答をお願いいたします。

    • ベストアンサー
    • Java
  • enum列挙子に使える文字列と使えない文字列

    enum Ok{A,A,月1,月1,_,?} enum Ng{1月,1月,→,!,☆} public class Main{public static void main(String[] args){ System.out.println("あああああ"); }}//終わり このJavaプログラムはエラーになります。何故ですか? 要するに、enumに使える列挙子の法則性に興味があります。「?」は通って「!」はエラーって、コンパイルを試みた後に結果を知ると、色々とムカつきます。 「!」は通って「?」はエラーだと嘘が書物に書いてあると、騙されます。 enumで使える列挙子(要素)のタイプが載ってるサイト、enumの列挙子に使うとエラーになってしまう例が載ってるサイトなどを紹介してくれるとありがたいです。 どんな文字列でもenumに使えて、何でもOKなら親切だと思うのに・・・

    • ベストアンサー
    • Java
  • javaのenumについて

    下記の如くenumを利用しています。 Q1) 機械語コードに於いては、ONE、TWO、THREEの内容はどの様に置き換わりますか? Q2) ONE、TWO、THREEの内容は、整数に置き換えるような記述はありますか? //==================================================== class T_threadC { static int CNT=20000; volatile static int DATAX=-1; public static void main(String args[]) { abc s=abc.TWO; //sにabcで定義したTWOを代入する switch(s){ case ONE: CNT=2000; break; default: CNT=20000; break; } System.out.println("CNT="+CNT); new rcvInterrupt().start(); } } public enum abc { ONE, TWO, TREE }

    • ベストアンサー
    • Java
  • enumの使い方

    scanfから入力した値からenumを使うことはできませんか? 以下のようにしてみたのですが解決策がわかりません よろしくお願いします。 #include <stdio.h> enum DATA { a=1, b, c }; int main() { enum DATA data; char tmp; scanf("%c", &tmp); // aを入力したとする data = tmp; printf("%d\n", data); // 1が欲しい return 0; }

  • enumをintとして扱う必要があるパターンはあるのでしょうか。

    enumをintとして扱う必要があるパターンはあるのでしょうか。 よく enum ENUM_SAMPLE {  A,  B,  C, }; class CLASS_SAMPLE { private:  int type; // ENUM_SAMPLEのA,B,Cしか入らない public:  int GetType(){ return type; } }; という記述を良く見かけます。 class CLASS_SAMPLE { private:  ENUM_SAMPLE type; // ENUM_SAMPLEのA,B,Cしか入らない public:  ENUM_SAMPLE GetType(){ return type; } }; のほうが良いのではないか思うのですが、intで定義することによる利点が何かあるのでしょうか。 あと、過去に // bcc利用時に問題があるのでintに変更しました int CLASS_SAMPLE::GetType {  return type; } というコメントがついたソースを見たことがあり、 自分でbccを使ってenumを返すように修正してテストしてみたことがあるのですが、何が問題なのか見つけることが出来ませんでした。 enum名を直接使用した場合に問題が発生することがあるのか、またどのような問題が発生することがあるのか、回答お願いします。

  • C語でenumの使い方

    http://www9.plala.or.jp/sgwr-t/c/sec16.html の下部に enum week { SUN, MON, TUE, WED, THU, FRI, SAT }; int main(void) { enum week w;   /* ⇒列挙型 week で変数 w を宣言 */ w = MON; /* ⇒変数 w に列挙定数 MON を代入 */ と書かれています。 列挙型 week で変数 w を宣言するのはどういうときに メリットがありますか? 普通にunsigned char w と何が違うのでしょうか?

  • enumに数字と配列

    C#で数値で、配列の列挙はできないでしょうか。 やりたいイメージは以下です。 public enum abc : byte[] { 1 = {0x30, 0x31}, 2 = {0x32, 0x33}, 3 = {0x34, 0x35}, } public enum abc : byte[] { A = {0x30, 0x31}, B = {0x32, 0x33}, C = {0x34, 0x35}, } いろいろ試しましたが、できませんでした。お願いします。

  • java enum

    エラー内容 int cannot be dereferenced 何が原因でエラーになっているのですか? import java.util.*; enum light{ red,yellow,blue } class m1{ public static void main(String[] args){ int light; Scanner ss = new Scanner(System.in); System.out.println("整数値を入力 : "); int i = ss.nextInt(); if(i == light.red.ordinal()){ System.out.println("信号は赤色です"); } else if(i == light.yellow.ordinal()){ System.out.println("信号は黄色です"); } else if(i == light.blue.ordinal()){ System.out.println("信号は青色です"); } } }

  • 継承、実装についてまとめています。この図は正しいですか?

    継承、実装についてまとめています。この図は正しいですか? クラス1 から継承した クラス2のものを、クラス3で継承するのでしょうか? クラス1 │ int a; │ static int b; │ │ クラス1() { } │ │ int methodA () { } │ static int methodB() { } ↓ サブクラス1 extends クラス1 │ int a; // 継承 │ int c; │ static int d; │ │ サブクラス1() { } // コンストラクタは継承しない、super()で呼び出す │ │ int methodA () { } // 継承 │ int methodC() { } │ static int methodD() { } ↓ サブクラス2 extends サブクラス1 implements サブインタフェース1, サブインタフェース2… ↑ int a; // サブクラス1のフィールドを継承 │ int c; // 継承 │ int e; │ static int f; │ public static final int g; // 実装(サブインタフェース1) │ public static final int h; // 実装 │ │ サブクラス2() { } │ │ int methodA () { } // サブクラス1のメソッドを継承 │ int methodC() { } // 継承 │ int methodE() { } │ static int methodF() { } │ int methodG() { } // 実装(サブインタフェース1) │ int methodH() { } // 実装 │ interface サブインタフェース1 extends スーパインタフェース1... ↑ public static final int h; │ │ public abstract int methodE() { } // 継承 │ public abstract int methodH() { } │ interface スーパーインタフェース public static final int g; public abstract int methodG() { }

    • ベストアンサー
    • Java
  • C#とjavaのstatic

    public static Final int a = 1; というjavaのプログラムをC#で public static const int a = 1; に書き換えたらstaticは無理というエラーがでました。 C#とjavaの比較の説明サイトを2・3見たのですが、よく意味がわかりませんでした。 なぜC#ではstaticにできないのでしょうか?

専門家に質問してみよう