Java で Enum を宣言する

Muhammad Zeeshan 2023年10月12日
  1. Java における Enums の目的
  2. int が必要です
  3. int 不要
Java で Enum を宣言する

Java で DownloadTypeenum を宣言することは、この記事のトピックになります。 enums の目的から見ていきましょう。

Java における Enums の目的

  1. 列挙型は、integer などの外部値に依存する必要なく、プログラム内でオブジェクトのコレクションを定数として維持できるようにするために使用されます。
  2. Java では、enumsswitch ステートメントの入力として使用でき、他の比較方法の中でも特に == または等価演算子を使用して安全に比較できます。

enum は基本的にその型のオブジェクトであり、プリミティブではないため、必要に応じてメソッドを呼び出したり、.value を使用して enum から値を抽出したりする必要がありません。

まず、int が必要かどうかを自問する必要があります。 次に、次のセクションで説明する 2つの結果が考えられます。

int が必要です

整数が必要な場合は、型の安全性が失われ、ユーザーが無効な情報を API に送信する可能性があるという危険を冒してもかまいません。 以下の定数も整数として宣言できます。

静的メンバーしかなく、Java で静的クラスをシミュレートしたい場合は、コンストラクターを private にします。

public final class DownloadType {
  public static final int audio = 0;
  public static final int video = 1;
  public static final int audio_and_video = 2;
  private DownloadType() {}
}

.ordinal() 関数は、値フィールドが存在するかどうかに関係なく使用できるため、enum は次のように定義できます。

enum DownloadType { audio, video, audio_and_video }

enum 値に一致する数値を取得するには、.ordinal() 関数を使用します。 列挙された各値には、ゼロから始まり、宣言された同じシーケンス内の連続する値ごとに 1 ずつ増加する一意の番号が自動的に割り当てられます。

DownloadType.audio_and_video.ordinal();

int 不要

enum の整数値は常に信頼できるとは限りません。 代わりに値自体を使用してください。

関連付けられた整数が不要な場合は、代わりにこれを試してください。

private enum DownloadType { audio, video, audio_and_video }
DownloadType dt = MyObj.getDownloadType();
if (dt == DownloadType.audio) {
}

switch および if() 本体にロジックを記述して、アクションを実行できます。 さらに、if() 条件の代わりに switch ステートメントを使用できます。

private enum DownloadType { audio, video, audio_and_video }
DownloadType dt = MyObj.getDownloadType();

switch (dt) {
  case audio:
    break;
  case video:
    break;
  case audio_and_video:
    break;
}

良い習慣

  1. 列挙定数の代わりに整数定数を使用すると、プログラムの型安全性が損なわれます。 したがって、そうしないようにしてください。
  2. 必ずしもそうする必要がない場合は、コード内で整数と enum を組み合わせないでください。
Muhammad Zeeshan avatar Muhammad Zeeshan avatar

I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.

LinkedIn

関連記事 - Java Enum