Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中从枚举获取字符串值_Java_Enums - Fatal编程技术网

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

在Java中从枚举获取字符串值,java,enums,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 getV

我有一个这样定义的枚举,我希望能够获得各个状态的字符串。我应该如何编写这样的方法

我可以获取状态的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
enum,
status.name()
将为您提供其定义的名称。

您可以使用
values()
方法:


例如,
Status.values()[0]
将在您的案例中返回PAUSE,如果打印它,将调用
toString()
,并打印“PAUSE”。

您可以将此方法添加到您的状态枚举中:

 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
}
使用给定的默认方法名()

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());
    }
}

我相信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() 

它返回高/低作为字符串,在本例中

Status s=Status.PAUSE;System.out.println(s.name());这个答案将帮助您理解,您可以使用
Status.ordinal(),而不是定义0,1,2
@ArnaudDenoyelle:你应该避免使用ordinal(),见Joshua Bloch“有效的Java”@GarfieldKlon我同意。我不建议(也永远不会)依赖
ordinal()
,因为在枚举中添加值将移动每个枚举的序号。我想指出,OP复制了
ordinal()
的行为。对,只是添加
Status.values()[0]
的类型是
Status
而不是
String
@JoeMaher
toString()
似乎是官方文档中的首选方式:“大多数程序员应该使用toString()方法优先于此方法,因为toString方法可能会返回一个更为用户友好的名称。“()@Carsten
status.name()
如果您想在代码中使用它(为了准确性和一致性),
status.toString()
如果您想向用户显示它(为了可读性),它是合适的.为什么不重写toString以返回name??返回什么?一或一,存在差异(枚举名称或其值)如何打印“一”、“二”,我指的是枚举的值字符串?