1
public enum AppConst{
    WIDTH (1280),
    HEIGHT (800);

    private final int value;

    AppConst(int value) {
        this.value = value;
    }
    private int get() { return value; }
}

対。

public class AppConst{
    public static final int WIDTH = 1280;
    public static final int HEIGHT = 800;
}

enums定数値の保存に使用する方が良いと読みました。私が示したようにそれらを保存するのは良い方法ですか、それとも何か誤解しましたか?

編集。必要に応じて簡単に変更できるので、そのような値をすべて 1 か所にまとめたほうがよいのではないかと考えました。私はそれで間違っていますか?

EDIT2。 AppConst は、「マジック ナンバー」であってはならないすべての値を格納する場所になることを目的としています。ウィンドウの座標など。DAYS_IN_WEEK = 7、MAX_smth = ...、...、... などのフィールドが存在する可能性があることを計画しました。

4

5 に答える 5

3

Enums変数の代わりに使用する主な利点はstatic final、安全のためにメソッド パラメーターの制限を処理する場合です。次に例を示します。

public void myMethod(int width, int height){}

VS

public void myMethod(AppConst width, AppConst height){}

int2番目は、あなたの場合、800と1280の許容値を制限します.

したがって、必要に応じて、列挙型は静的定数よりも安全な場合があります。

さらに、列挙型に動作を持ち込まないので、次のように簡単に書くことができます。

public enum AppConst{
    WIDTH (1280),
    HEIGHT (800);
}
于 2013-02-22T16:20:48.100 に答える
2

列挙型は、列挙型を表すためのものです。つまり、有限の既知の値のセットから単純に構成されるデータのタイプです。複数の「ビット」情報を追加したい場合、列挙型にデータを追加するのは興味深いことです:

public enum Gender MALE("male", "man", "Mr"), FEMALE("female", "woman", "Ms");

  private String genderName;
  private String genderPerson;
  private String genderTitle;

  ....

}

通常、オブジェクトを表す 1 つの変数を持ち、その値をオンにするために使用されます。

あなたの場合、整数に対して2つのよく知られている値が必要なだけだと思う​​ので、静的な最終的なintを使用します。

@PremGenEditor で指摘されているように、WIDTH と HEIGHT が変更されるケースに遭遇する可能性があることに注意してください。そしてそれらは当然 int になります。

于 2013-02-22T16:21:30.690 に答える
2

通常、列挙は、同じ種類のエンティティの一連の値を含めるために使用されます。これは、WIDTH と HEIGHT のみの場合にはまだ適切かもしれませんが、たとえば背景色用に新しいアプリケーション定数を追加する必要がある場合は、もはや適切ではありません。

クラス AppConst の名前は、一般的なものを思い起こさせます。ここには 2 つのケースがあります。

  1. ディメンションとは関係のない他の追加の定数に将来これを使用することを実際に計画している場合は、間違いなく静的オプションを選択します。
  2. これをこれら 2 つの定数のみに使用する場合は、AppConst とは異なる名前を使用します。これにより、ディメンションについて話しているという考えが得られます。
于 2013-02-22T16:24:11.060 に答える
1

実際の-constant はあなたのもののようなものですが、これは少しやり過ぎです。状態などの列挙型には列挙型を使用します。

昔は、次のようなことをしていたかもしれません。

public static final int STATUS_OKAY = 0;
public static final int STATUS_ERROR = 1;
public static final int STATUS_WARNING = 3;

public static final int SOMETHINGELSE = 0;

// ...

if (getStatus() == STATUS_OKAY){
    // Do something...
}
if (getStatus() == 4) // This is NEVER true! Still it's allowed

しかし、これは型保存ではありません。また、存在しない値と比較することもできます (たとえば4)。列挙型を使用すると、それがなくなり、コードが読みやすくなります。

public enum Status{
    OKAY, WARNING, ERROR
}

if (getStatus() == Status.OKAY){
    // Do Something
}
if (getStatus() == Status.DOESNTEXIST) // Compile-time error.

意図がより明確になり、より良いコードが得られ、列挙定数のコンパイル時のセキュリティが確保されます。


あなたの例では、WIDTHHEIGHTは単なる定数であり、それらを定数フィールドとして保存できます。

于 2013-02-22T16:23:12.133 に答える
0

Java の列挙型はタイプ セーフであり、独自の名前空間があります。これは、列挙型が以下の例の「AppConst」などの型を持ち、列挙型定数で指定された以外の値を割り当てることができないことを意味します。

public enum AppConst { WIDTH (1280), HEIGHT (800);}
AppConst height = AppConst.HEIGHT;
height = 1; /*compilation error*/

Java の Enum は、クラスやインターフェイスのような参照型であり、Java Enum 内でコンストラクター、メソッド、および変数を定義できるため、C および C++ 言語の Enum よりも強力になります。

Java の Enum は、switch ステートメントの引数として使用でき、int や char プリミティブ型のように「case:」を使用できます。java enum のこの機能により、スイッチ操作に非常に役立ちます。

Java の Enum 内で定義された定数は final であるため、以下に示すように「==」等値演算子を使用して安全に比較できます。

AppConst height = AppConst.HEIGHT;
if (height == AppConst.HEIGHT){
  System.out.println("Hello World!");
}

ただし、== 演算子を使用してオブジェクトを比較することはお勧めしません。常に equals() メソッドまたは compareTo() メソッドを使用してオブジェクトを比較してください。

Java の Enum はインターフェイスを実装し、通常のクラスのように任意のメソッドをオーバーライドできます。また、Java の Enum は Serializable と Comparable の両方のインターフェイスを暗黙的に実装していることにも注意してください。

Java の Enum 内で抽象メソッドを定義でき、Java の enum のさまざまなインスタンスにさまざまな実装を提供することもできます。

Enum には独自の名前空間があります。Java の Enum に新しい定数を追加するのは簡単で、既存のコードを壊さずに新しい定数を追加できます。

于 2013-02-22T17:10:47.100 に答える