0

我需要像 WEATHER.SUNNY 这样的点符号枚举,因为它们使用通配符表示主题。我知道这是不可能的,因为枚举需要是有效的标识符。

这里有人建议覆盖 toString 方法,但我真的不明白这是什么意思。但是,是否仍然可以这样做?

4

3 回答 3

4

您绝对可以按照@Stefan 的建议进行操作,但这可能是将字段附加到枚举值的一个很好的用例:

public enum Topic {
    SUNNY("WEATHER.SUNNY"), CLOUDY("WEATHER.CLOUD"), ...

    String notation;

    Topic(String notation) {
        this.notation = notation;
    }

    public String getNotation() { return notation; }
}

然后你可以调用Topic.SUNNY.getNotation().

于 2017-10-11T10:54:20.713 回答
1

定义具有大写名称的枚举没有问题。它与 Java 命名约定不一致,但它可以工作。

enum WEATHER {
    SUNNY, CLOUDY;
}

然后你会这样使用:

WEATHER weather = WEATHER.SUNNY
于 2017-10-11T10:59:16.900 回答
0

显示覆盖 toString 想法的示例代码:

public class Test {

enum Weather { Sunny, Cloudy;

    @Override
    public String toString() {
        return "WEATHER." + super.toString().toUpperCase();
    }

};

public static void main(String[] args) {
    System.out.println(Weather.Sunny);
}
}

输出:WEATHER.SUNNY

于 2017-10-11T10:47:39.793 回答