Java: Enum と Int の違い 質問する

Java: Enum と Int の違い 質問する

Java でフラグを使用する場合、主に 2 つのアプローチがあります。1 つは、int 値と一連の if-else ステートメントを使用する方法です。もう 1 つは、列挙型と case-switch ステートメントを使用する方法です。

フラグに列挙型を使用する場合と int を使用する場合では、メモリ使用量と速度に違いがあるかどうか疑問に思っています。

ベストアンサー1

どちらもintsswitchenumsまたは if-then-else を使用でき、メモリ使用量もどちらも最小限で、速度も同様です。指摘された点に関しては、両者の間に大きな違いはありません。

ただし、最も重要な違いは型のチェックです。Enumsチェックされるもの、intsされないものがあります。

次のコードを考えてみましょう:

public class SomeClass {
    public static int RED = 1;
    public static int BLUE = 2;
    public static int YELLOW = 3;
    public static int GREEN = 3; // sic

    private int color;

    public void setColor(int color) {
        this.color = color;
    }   
}

多くのクライアントはこれを適切に使用しますが、

new SomeClass().setColor(SomeClass.RED);

彼らがこれを書くのを妨げるものは何もありません:

new SomeClass().setColor(999);

public static finalこのパターンを使用する場合、主に 3 つの問題があります。

  • 問題は、ランタイム、 ないコンパイル時間がかかるので、修理費用がかさみ、原因の特定も難しくなります
  • 不正な入力を処理するためのコードを書く必要があります。通常はif-then-elsefinal付きでelse throw new IllegalArgumentException("Unknown color " + color);、これもまた高価です。
  • 定数の衝突を防ぐものは何もありません。上記のクラスコードは、両方YELLOWともGREEN同じ値を持っていてもコンパイルされます。3

を使用するとenums、次の問題をすべて解決できます。

  • 有効な値を渡さない限り、コードはコンパイルされません。
  • 特別な「不正な入力」コードは必要ありません。コンパイラがそれを処理します。
  • 列挙値は一意である

おすすめ記事