我们如何测试枚举,就像valueOf()一样?

时间:2014-07-11 15:01:49

标签: java enums value-of

G'day, 勘误表 ...我的计划如下所示。此更新旨在澄清并为深夜问题道歉。编译错误是由于文件中的其他地方的问题。

澄清:简单的Java 枚举,如下所示:

public enum ServiceSource
{
    NONE,
    URL,
    FILE;

}

想要检查, isURL ():

 public boolean isURL(){

    return (URL == this);
}

这有效(并且编译)......毫无疑问 - 正确回答: dasblinkenlight Elliott Frisch 非常感谢你的时间。

另见:

4 个答案:

答案 0 :(得分:5)

由于这是一个实例方法,您需要检查this是否等于URL,如下所示:

public boolean isURL(){
    return (URL == this);
}

Demo on ideone.

答案 1 :(得分:2)

如果你想拥有多态的方法 - 即对你的enum类的不同实例(值)表现出不同的行为,我的偏好是覆盖一个常用的方法:

public enum ServiceSource {

    NONE("no_value"),
    URL("url"){

        @Override
        public boolean isURL() {
            return true;
        }

    },
    FILE("file");

    private final String val;

    private ServiceSource(String val) {
        this.val = val;
    }

    public boolean isURL() {
        return false;
    }
}

但是对于检查这是否是特定enum值的方法,那么为每个常量添加isXXX方法似乎非常浪费。真的,使用enum的原因是你可以写

if(thing == ServiceSource.URL) 

代码中的其他地方。

答案 2 :(得分:1)

如果我理解你的问题,你的枚举中的正确方法是使用this,就像这样,

public enum ServiceSource
{
  NONE(   "no_value"  ),
  URL(    "url"       ),
  FILE(   "file"      );
  ServiceSource(String v) {
    text =v;
  }
  private String text;
  public boolean isURL() {
    return this == URL;
  }
}

答案 3 :(得分:0)

您可以在Enum上创建一个方法来检查自身的值,如下所示:

  public boolean isURL(){
    return (URL == this);
  }

但是很难看到这种方法的价值,因为每个Object都有一个内置的equals()方法来完成同样的事情。

if (serviceSource.equals(ServiceSource.URL)) { ... }

这是检查Enum变量(或任何变量)的指定值的更常见和明显的方法。采用第一种方法需要在Enum上使用新的isX()方法;每次添加枚举常量时,您可能都希望有一个新方法。