このように定義された列挙型があり、個々のステータスの文字列を取得できるようにしたいと思います。そのようなメソッドをどのように書くべきですか?
ステータスの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;
}
}
status
がStatus
列挙型の場合、status.name()
は定義された名前を提供します。
values()
メソッドを使用できます:
たとえば、Status.values()[0]
はPAUSEを返します。これを印刷すると、toString()
が呼び出され、「PAUSE」が印刷されます。
以下の既定のメソッド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());
}
}
このメソッドを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
}
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()
この例では、文字列として高/低を返します