1. ホーム
  2. java

[解決済み] Java Enum return Int

2022-03-11 06:43:26

質問

enumの宣言に困っています。私が作成しようとしているのは、3つのダウンロードタイプ(AUDIO、VIDEO、AUDIO_AND_VIDEO)がある「DownloadType」用のenumです。

以下のようなコードを実装しました。

private enum DownloadType {
    AUDIO(0), VIDEO(1), AUDIO_AND_VIDEO(2);
    private final int value;

    private DownloadType(int value) {
        this.value = value;
    }
}

これは、次のように使用するとうまくいきます。

DownloadType.AUDIO_AND_VIDEO.value;

しかし、私は「値」を求めなくてもいいようにしたいのです。私の勘違いかもしれませんが、JavaのFontのようなクラスはこのような仕組みになっています。

Font.PLAIN

これはint値を返しますが、私たちは使いません。

Font.PLAIN.value

解決方法は?

フォント.PLAIN ではない enumです。これは単なる int . enum から値を取り出す必要がある場合は、メソッドを呼び出すか、あるいは .value なぜなら、列挙型はプリミティブではなく、それ自身の型を持つオブジェクトだからです。

本当に int , の場合、ユーザがAPIに無効な値を渡す可能性があるため、型安全性が失われることを受け入れることになります。 かもしれない これらの定数を int もあります。

public final class DownloadType {
    public static final int AUDIO = 0;
    public static final int VIDEO = 1;
    public static final int AUDIO_AND_VIDEO = 2;

    // If you have only static members and want to simulate a static
    // class in Java, then you can make the constructor private.
    private DownloadType() {}
}

ちなみに、この value フィールドは冗長です。 .ordinal() メソッドを定義することができます。 enum としています。

enum DownloadType { AUDIO, VIDEO, AUDIO_AND_VIDEO }

を使用して、quot;value" を取得します。

DownloadType.AUDIO_AND_VIDEO.ordinal()


編集 : コードを修正しました。 static class は、Java では許可されていません。参照 今回のSO回答 の説明と、Javaで静的クラスを定義する方法の詳細があります。