Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-使用点表示法创建枚举_Java_Identifier_Enumerators - Fatal编程技术网

Java-使用点表示法创建枚举

Java-使用点表示法创建枚举,java,identifier,enumerators,Java,Identifier,Enumerators,我需要像WEATHER.SUNNY这样使用点符号的枚举,因为它们使用通配符表示主题。我知道这是不可能的,因为枚举需要是有效的标识符 有人建议覆盖toString方法,但我真的不明白这是什么意思。 但是,仍然可以这样做吗?显示重写toString思想的示例代码: public class Test { enum Weather { Sunny, Cloudy; @Override public String toString() { return "WEATHE

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

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

显示重写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湿度),可以嵌套内部枚举,但底层代码很快就会变得混乱。