0

Javaで列挙型を使用する最も一般的な正しい方法は何ですか? クラス コンストラクターやファクトリ メソッド パラメーターなどで列挙型を使用する必要がある場合、最初に考えられるのはenum、クラス内に public static を含めてインポートすることです。

package mypackage;
import mypackage.Data.ContentType;

class Data {
  public static enum ContentType { TYPE1, TYPE2, TYPE3 }  

  ContentType type;
  String value;

  public Data( String value, ContentType type ) {
    this.value = value;
    this.type = type;
  }
}

使用例: new Data( "some value", ContentType.TYPE1 );.

人々が下のような構造を好む理由は何ですか?

public static final int TYPE1 = 1;
public static final int TYPE2 = 2;
public static final int TYPE3 = 3;
4

5 に答える 5

3

これを「一般的な」使用法と呼ぶのはためらいがありますが、列挙型はある種のステート マシンを作成するのに最適です。

于 2013-08-19T15:42:46.150 に答える
1

良い質問。AnEnumは次の場合に最適です。

  1. 変更されることのない固定されたデータセット月の名前、曜日など
  2. 文字列の入力ミスを防ぐのに非常に便利です。Januar複数回入力するとタイプミスする可能性がありますが、 を使用するとEnum、構文的にチェックされます。
于 2013-08-19T15:43:06.703 に答える
0

列挙型を使用すると、switch ステートメントで値が欠落しているかどうかがコンパイラによってチェックされ、宣言された値以外の値は使用できないため、明らかな利点があります。

一部の人々は、慣性から、またはコードが他の言語にコンパイルされる可能性があるため、定数を使用し続ける場合があります。ほとんどの場合、列挙型に遭遇していないためであり、ほとんどの場合、列挙型はそれらの定数よりも優れています。

于 2013-08-19T15:54:02.093 に答える
0

以下は、Enum として宣言したクラスと、そのいくつかの理由です。

  1. コンポジションによって Award 参照を含むオブジェクトは、追加されるたびに新しい Award オブジェクトを作成する必要はありません (列挙型とシングルトンの使用を参照してください)。
  2. Enum はインスタンス制御であるため、賞を比較する必要がある場合は .equals() の代わりに == 演算子を使用して、(惨めな) CPU 時間を節約できます。
  3. したがって、全体として、新しいオブジェクトを作成する代わりに、セットから既存の不変オブジェクトを再利用する機会がある場合は、列挙型を使用します。
public enum Award {
    /*List of possible awards */
    FIRST_AWARD("FIRST_AWARD", "FIRST_AWARD_IN_THE_LIST", "./firstAward.jpg"),
    SECOND_AWARD("SECOND_AWARD", "SECOND_AWARD_IN_THE_LIST", "./secondAward.jpg"),
    THIRD_AWARD("THIRD_AWARD", "THIRD_AWARD_IN_THE_LIST", "./thirdAward.jpg");      

    private final String name;
    private final String description;
    private final String imageLink; 

    Award (String name, String description, String imageLink){
        this.name = name;
        this.description = description;
        this.imageLink = imageLink;
    }

...
}
于 2013-08-19T15:54:28.310 に答える