Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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中的switch语句中?_Java_Enums_Switch Statement - Fatal编程技术网

如何访问带有两个关键字的字符串,如;“好时光”;在Java中的switch语句中?

如何访问带有两个关键字的字符串,如;“好时光”;在Java中的switch语句中?,java,enums,switch-statement,Java,Enums,Switch Statement,可能重复: 下面是示例代码: public enum InstrumentType{ GUITAR,BANJO,MANDOLIN,DOBRO, FIDDLE ,LAMBEG DRUM, public String toString(){ switch(this){ case GUITAR: return "Guitar"; case BANJO:

可能重复:

下面是示例代码:

  public enum InstrumentType{

        GUITAR,BANJO,MANDOLIN,DOBRO, FIDDLE ,LAMBEG DRUM,

        public String toString(){
            switch(this){
            case GUITAR:
                return "Guitar";
            case BANJO: 
                return "Banjo";
            case DOBRO:
                return "Dobro";
            case FIDDLE:
                return "Fiddle";

            case LAMBEG DRUM:
                return "Lambeg drum";

            default: 
                return "Unspecified";
            }
        }

}
如何在交换机中访问“Lambeg drum”等两个关键字? 我不想用兰贝格鼓或兰贝格鼓。 有什么建议吗?
提前谢谢。

这是不可能的。关键字
case
后面的值是一个标识符,或计算为常量值的值(例如整数、枚举或布尔值)

Java中的标识符不能包含空格


似乎您的问题本质上是关于Java中的有效命名,而您提出的解决方案是无效的。

简而言之:“您不能”。Java变量/类标识符不能包含空格。这条规则确实有一些骇人听闻的黑客,但确实没有理由这么做

首先,名称“LAMBEG-DRUM”不是有效的枚举标识符,不能在那里有空格,也不能在交换机中有空格。使用“u”分隔两个单词,这是惯例:“LAMBEG_DRUM”

您可以使用字段和构造函数扩展枚举

 public enum InstrumentType{

        GUITAR("Guitar"),
        BANJO("Banjo")

        private final String name;

        private InstrumentType(String name) {
           this.name = name;          
        }

        public String toString(){
           return this.name;
        }

}

不要在toString()方法中使用case语句。您仍然需要使用LAMBEG_DRUM或枚举名称中没有空格的东西,但是您可以向构造函数添加描述,并在toString()中使用它


枚举标识符必须遵循与Java中变量相同的命名规则,因此您不能首先使用空格。因为您甚至不能声明
LAMBEG-DRUM
(标识符不能有空格),所以我看不到用例…好的,但如何实现这一点?意思是说还有其他方法吗?天哪…只要遵守Java的语法规则。使用下划线。空格不起作用(至少在没有一些反射或动态类巫毒的情况下是不起作用的,即使这样,你也不能以你想要的方式使用它)。我正在使用enum为单关键字字符串实现这一点,有没有更好的方法?@WAnant u说你不能使用“u”或LAMBEGDRUM,那么LAMBEG1DRU呢……如果不起作用,试试LAMBEG2DRUM。。有无限的可能性。有问题吗D
    public enum InstrumentType {
            GUITAR("Guitar"), //
            BANJO("Banjo"), //
            MANDOLIN("Mandolin"), //
            DOBRO("Dobro"), //
            FIDDLE("Fiddle"), //
            LAMBEG_DRUM("Lambeg Drum");

            private String description;

            private InstrumentType(String description) {
                    this.description = description;
            }

            @Override
            public String toString() {
                    return description;
            }
    }