如何从Java枚举中获取价值

Man*_*dar 7 java enums

我有一个看起来像的枚举:

public enum Constants{
  YES("y"), NO("N")
  private String value;

  Constants(String value){
    this.value = value;
  }
}
Run Code Online (Sandbox Code Playgroud)

我有一个看起来像的测试类

public class TestConstants{
 public static void main(String[] args){
   System.out.println(Constants.YES.toString())
   System.out.println(Constants.NO.toString())
 }
}
Run Code Online (Sandbox Code Playgroud)

输出是:

YES
NO
Run Code Online (Sandbox Code Playgroud)

代替

Y
N
Run Code Online (Sandbox Code Playgroud)

我不确定这里有什么问题?

Moh*_*uag 19

您需要覆盖toString枚举的方法:

public enum Constants{
    YES("y"), NO("N")

    // No changes

    @Override
    public String toString() {
        return value;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 也许,也许不是.也许OP需要一个单独的`getValue()`方法呢? (3认同)
  • 也许吧,但是OP明确地调用了他枚举的un-overriden`toString()`方法,这几乎可以说明一切. (2认同)
  • getter方法比较简单,但是两种解决方案都可以。 (2认同)
  • 尽管此解决方案有效,但它仅适用于这个特定问题。如果“googler”来到这里并且他或她需要从中获取值的枚举具有非字符串值,则此解决方案将不起作用。按照惯例,您不应该使用“toString()”返回值。这违反了“Object.toString()” API。此外,重写此方法仅适用于“String”值。相反,您应该创建一个返回适当数据类型的“getValue()”函数。请参阅 David Yee 或 Just a Logic Gate 的回答。无论 OP 投票如何,他们都比这个更正确。 (2认同)

Dav*_*Yee 10

您还可以向枚举添加一个 getter 并简单地调用它来访问实例变量:

public enum Constants{
    YES("Y"), NO("N");
    private String value;

    public String getResponse() {
        return value;
    }

    Constants(String value){
        this.value = value;
    }
}

public class TestConstants{
    public static void main(String[] args){
        System.out.println(Constants.YES.getResponse());
        System.out.println(Constants.NO.getResponse());
    }
}
Run Code Online (Sandbox Code Playgroud)


m.a*_*bin 5

编写Getter和Setter value并使用:

System.out.println(Constants.YES.getValue());
System.out.println(Constants.NO.getValue());
Run Code Online (Sandbox Code Playgroud)


小智 5

在枚举中创建一个 getValue() 方法,并使用它代替 toString()。

public enum Constants{
 YES("y"), NO("N")
 private String value;

 Constants(String value){
  this.value = value;
 }
}

 public String getValue(){
  return value;
 }
Run Code Online (Sandbox Code Playgroud)

而不是:

System.out.println(Constants.YES.toString())
System.out.println(Constants.NO.toString())
Run Code Online (Sandbox Code Playgroud)

(也缺少分号),使用

System.out.println(Constants.YES.getValue());
System.out.println(Constants.NO.getValue());
Run Code Online (Sandbox Code Playgroud)

希望这解决了您的问题。如果不想在枚举中创建方法,可以将值字段设为公开,但这会破坏封装。