web-dev-qa-db-ja.com

Javaの列挙型から文字列値を取得する

このように定義された列挙型があり、個々のステータスの文字列を取得できるようにしたいと思います。そのようなメソッドをどのように書くべきですか?

ステータスのint値を取得できますが、intから文字列値を取得するオプションも必要です。

public enum Status {
    PAUSE(0),
    START(1),
    STOP(2);

    private final int value;

    private Status(int value) {
        this.value = value
    }

    public int getValue() {
        return value;
    }
}
66
Mozbi

statusStatus列挙型の場合、status.name()は定義された名前を提供します。

96
harsh

values()メソッドを使用できます:

たとえば、Status.values()[0]はPAUSEを返します。これを印刷すると、toString()が呼び出され、「PAUSE」が印刷されます。

47
Juvanis

以下の既定のメソッドname()を使用します

public enum Category {
        ONE("one"),
        TWO ("two"),
        THREE("three");

        private final String name;

        Category(String s) {
            name = s;
        }

    }

public class Main {
    public static void main(String[] args) throws Exception {
        System.out.println(Category.ONE.name());
    }
}
11

このメソッドをStatus列挙型に追加できます。

 public static String getStringValueFromInt(int i) {
     for (Status status : Status.values()) {
         if (status.getValue() == i) {
             return status.toString();
         }
     }
     // throw an IllegalArgumentException or return null
     throw new IllegalArgumentException("the given number doesn't match any Status.");
 }

public static void main(String[] args) {
    System.out.println(Status.getStringValueFromInt(1)); // OUTPUT: START
}
7
M. Abbas

EnumのAPIには.name()があり、次の例のように使用するのは非常に簡単だと思います。

private int security;
public String security(){ return Security.values()[security].name(); }
public void setSecurity(int security){ this.security = security; }

    private enum Security {
            low,
            high
    }

これを使用すると、単に呼び出すことができます

yourObject.security() 

この例では、文字列として高/低を返します

0