在Java中从枚举中获取字符串值

Moz*_*zbi 69 java enums

我有一个这样定义的枚举,我希望能够获得各个状态的字符串.我该怎么写这样的方法?

我可以获取状态的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;
    }
}
Run Code Online (Sandbox Code Playgroud)

har*_*rsh 99

如果statusStatusenum 类型,status.name()将为您提供其定义的名称.

  • @Carsten`status.name()`如果你想在代码中使用它(为了准确性和一致性)是合适的,如果你想向用户显示它,那么`status.toString()`是合适的(为了便于阅读). (4认同)
  • @JoeMaher`toString()`似乎是官方文档中的首选方式:"大多数程序员应优先使用toString()方法,因为toString方法可能返回一个更加用户友好的名称." (http://docs.oracle.com/javase/6/docs/api/java/lang/Enum.html#name()) (3认同)

Juv*_*nis 48

你可以使用values()方法:

例如,Status.values()[0]在您的情况下将返回PAUSE,如果您打印它,toString()将被调用并将打印"PAUSE".


Bis*_*kar 11

使用默认方法名称()作为给定的波纹管

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 返回什么?一个或一个,有一个区别(枚举名称或其值) (4认同)

M. *_*bas 7

您可以将此方法添加到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
}
Run Code Online (Sandbox Code Playgroud)