Java-使用点表示法创建枚举
我需要像WEATHER.SUNNY这样使用点符号的枚举,因为它们使用通配符表示主题。我知道这是不可能的,因为枚举需要是有效的标识符 有人建议覆盖toString方法,但我真的不明白这是什么意思。Java-使用点表示法创建枚举,java,identifier,enumerators,Java,Identifier,Enumerators,我需要像WEATHER.SUNNY这样使用点符号的枚举,因为它们使用通配符表示主题。我知道这是不可能的,因为枚举需要是有效的标识符 有人建议覆盖toString方法,但我真的不明白这是什么意思。 但是,仍然可以这样做吗?显示重写toString思想的示例代码: public class Test { enum Weather { Sunny, Cloudy; @Override public String toString() { return "WEATHE
但是,仍然可以这样做吗?显示重写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
显示覆盖到字符串的想法的示例代码:
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
您完全可以按照@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()
您完全可以按照@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()
定义名称大写的枚举没有问题。
它与Java命名约定不一致,但它可以工作
enum WEATHER {
SUNNY, CLOUDY;
}
那么您将使用如下方式:
WEATHER weather = WEATHER.SUNNY
定义名称大写的枚举没有问题。 它与Java命名约定不一致,但它可以工作
enum WEATHER {
SUNNY, CLOUDY;
}
那么您将使用如下方式:
WEATHER weather = WEATHER.SUNNY
谢谢你的通知,工作很好。不过,我真的不知道如何将此应用于更复杂的结构。想象一下:WEATHER.SUMMER.SUNNY.dryhumidity有隐含的等级吗?每一个物体都会有一个这样的类别吗?作为一个主题类的字段,它们应该是不同的枚举吗?你能存一套吗?这要看你要干什么了?对不起,我没准备好。点确实意味着层次顺序,并将导致树结构。使用字符串显然没有问题,但对于枚举,我真的不知道如何实现更复杂的结构。因此,您可以投入大量资金编写DSL(例如),或者您可以只执行一个生成器模式,其中build()方法对您在各个字段中选择的枚举进行验证。如果您希望能够执行此处引用的操作(WEATHER.SUMMER.SUNNY.dry湿度),您可以嵌套内部枚举,但底层代码很快就会变得混乱。感谢此方法,它工作正常。不过,我真的不知道如何将此应用于更复杂的结构。想象一下:WEATHER.SUMMER.SUNNY.dryhumidity有隐含的等级吗?每一个物体都会有一个这样的类别吗?作为一个主题类的字段,它们应该是不同的枚举吗?你能存一套吗?这要看你要干什么了?对不起,我没准备好。点确实意味着层次顺序,并将导致树结构。使用字符串显然没有问题,但对于枚举,我真的不知道如何实现更复杂的结构。因此,您可以投入大量资金编写DSL(例如),或者您可以只执行一个生成器模式,其中build()方法对您在各个字段中选择的枚举进行验证。如果您希望能够执行此处引用的操作(WEATHER.SUMMER.SUNNY.dry湿度),可以嵌套内部枚举,但底层代码很快就会变得混乱。