草庐IT

Java 枚举与静态常量

我正在查看一些由公司其他部门维护的Java代码,顺便提一下,一些前C和C++开发人员。普遍存在的一件事是使用静态整数常量,例如classEngine{privatestaticintENGINE_IDLE=0;privatestaticintENGINE_COLLECTING=1;...}除了缺少“final”限定符之外,我对这种代码有点困扰。我希望看到,在学校主要接受Java培训,会更像classEngine{privateenumState{Idle,Collecting};...}但是,我的论点失败了。为什么,如果有的话,后者比前者更好? 最佳答案

Java 枚举与静态常量

我正在查看一些由公司其他部门维护的Java代码,顺便提一下,一些前C和C++开发人员。普遍存在的一件事是使用静态整数常量,例如classEngine{privatestaticintENGINE_IDLE=0;privatestaticintENGINE_COLLECTING=1;...}除了缺少“final”限定符之外,我对这种代码有点困扰。我希望看到,在学校主要接受Java培训,会更像classEngine{privateenumState{Idle,Collecting};...}但是,我的论点失败了。为什么,如果有的话,后者比前者更好? 最佳答案

java - 为什么不能在 switch 语句中完全限定枚举值?

(注意:已编辑问题;之前的意图不明确)考虑这段代码:publicfinalclassFoo{privateenumX{VALUE1,VALUE2}publicstaticvoidmain(finalString...args){finalXx=X.VALUE1;switch(x){caseVALUE1:System.out.println(1);break;caseVALUE2:System.out.println(2);}}}这段代码运行良好。但是,如果我替换:caseVALUE1://orVALUE2与:caseX.VALUE1://orX.VALUE2然后编译器提示:java:/

java - 为什么不能在 switch 语句中完全限定枚举值?

(注意:已编辑问题;之前的意图不明确)考虑这段代码:publicfinalclassFoo{privateenumX{VALUE1,VALUE2}publicstaticvoidmain(finalString...args){finalXx=X.VALUE1;switch(x){caseVALUE1:System.out.println(1);break;caseVALUE2:System.out.println(2);}}}这段代码运行良好。但是,如果我替换:caseVALUE1://orVALUE2与:caseX.VALUE1://orX.VALUE2然后编译器提示:java:/

java - 枚举、接口(interface)和 (Java 8) lambdas : code compiles but fails at runtime; is this expected?

JDK是Oracle的JDK1.8u65,但“低至”1.8u25也出现了问题。这是完整的SSCCE:publicfinalclassFoo{privateinterfaceX{defaultvoidx(){}}privateenumE1implementsX{INSTANCE,;}privateenumE2implementsX{INSTANCE,;}publicstaticvoidmain(finalString...args){Stream.of(E1.INSTANCE,E2.INSTANCE).forEach(X::x);}}此代码编译;但它在运行时失败:Exceptionint

java - 枚举、接口(interface)和 (Java 8) lambdas : code compiles but fails at runtime; is this expected?

JDK是Oracle的JDK1.8u65,但“低至”1.8u25也出现了问题。这是完整的SSCCE:publicfinalclassFoo{privateinterfaceX{defaultvoidx(){}}privateenumE1implementsX{INSTANCE,;}privateenumE2implementsX{INSTANCE,;}publicstaticvoidmain(finalString...args){Stream.of(E1.INSTANCE,E2.INSTANCE).forEach(X::x);}}此代码编译;但它在运行时失败:Exceptionint

java - 从内部嵌套枚举访问外部类

有办法进入外面吗?publicclassOuterClass{Stringdata;publicvoidouterMethod(Stringdata){this.data=data;}publicenumInnerEnum{OPTION1("someData"),OPTION2("otherData");InnerEnum(Stringdata){//Doesnotwork:OuterClass.this.outerMethod(data);}}} 最佳答案 正如Eric所说,枚举是隐式静态的。做你想做的事,添加一个方法,callO

java - 从内部嵌套枚举访问外部类

有办法进入外面吗?publicclassOuterClass{Stringdata;publicvoidouterMethod(Stringdata){this.data=data;}publicenumInnerEnum{OPTION1("someData"),OPTION2("otherData");InnerEnum(Stringdata){//Doesnotwork:OuterClass.this.outerMethod(data);}}} 最佳答案 正如Eric所说,枚举是隐式静态的。做你想做的事,添加一个方法,callO

java - Proguard 不会保留类(class)成员的枚举

我正在开发一个作为javajar分发的库,并且我正在对它运行proguard,以便只暴露所需的接口(interface)。我有一个带有一堆成员变量和一些枚举定义的配置类。我的proguard脚本很好地保留了成员变量,但是,枚举定义被混淆了。我已经尝试了所有我能想到的强制proguard保留这些内部定义和公共(public)枚举的方法,但我无法让它工作。我现在正在使用:-keeppublicclasscom.stuff.MyConfigObject{public*;}-keepclassmembersenum*{publicstatic**[]values();publicstatic*

java - Proguard 不会保留类(class)成员的枚举

我正在开发一个作为javajar分发的库,并且我正在对它运行proguard,以便只暴露所需的接口(interface)。我有一个带有一堆成员变量和一些枚举定义的配置类。我的proguard脚本很好地保留了成员变量,但是,枚举定义被混淆了。我已经尝试了所有我能想到的强制proguard保留这些内部定义和公共(public)枚举的方法,但我无法让它工作。我现在正在使用:-keeppublicclasscom.stuff.MyConfigObject{public*;}-keepclassmembersenum*{publicstatic**[]values();publicstatic*