1

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

澄清:一个简单的Java enum,像这样:

public enum ServiceSource
{
    NONE,
    URL,
    FILE;

}

想查一下,isURL ():

 public boolean isURL(){

    return (URL == this);
}

这有效(并编译)......毫无疑问 - 正确回答:dasblinkenlightElliott Frisch非常感谢您的宝贵时间。

也可以看看:

4

4 回答 4

5

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

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

ideone 上的演示。

于 2014-07-11T15:04:45.453 回答
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) 

在您的代码中的其他地方。

于 2014-07-11T15:07:21.430 回答
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;
  }
}
于 2014-07-11T15:06:09.380 回答
0

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

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

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

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

这将是检查 Enum 变量(或与此相关的任何变量)的分配值的更常见和明显的方法。采用第一种方法需要您在 Enum 上有一个新的 isX() 方法;每次添加 Enum 常量时,您可能都需要一个新方法来伴随它。

于 2014-07-11T15:11:03.637 回答