我明白为什么枚举构造函数不能访问静态字段和枚举本身中的方法,以及为什么允许使用相同的方法在类里面。以下面的代码为例,importjava.util.ArrayList;importjava.util.List;publicenumFoo{A("Somestring"),B("Someotherstring"),;staticListlist=newArrayList();Foo(Stringdescription){list.add(description);}}此代码导致编译时错误,从初始化程序非法引用静态字段。相关背景枚举构造函数在静态字段拥有所有之前被调用被初始化。在上面的示例中
我有一个字符串(这是一条消息)作为输入,我需要根据该字符串执行4种可能的操作之一我知道有eunm.valueOf()选项,但我有4个不同的枚举,每个枚举几乎没有可能的消息。看起来像:publicenumfirst{ONE,TWO,THREE};publicenumsecond{FOUR,FIVE,SIX};publicenumthird{SEVEN,EIGHT,NINE};publicvoidwork(Stringmessage){//HereIwanttocomparemessagestringtooneofthe3enums}是否可以用枚举的一种方法来做到这一点?或者我应该只尝试创
当我尝试使用枚举来存储:“=”、“>”、“publicstaticenumDataValueModifier{EQUAL("="),GREATER_THAN(">"),GREATER_EUQAL(">="),LESS_THAN("当我尝试比较字符串以查看它是否包含“=”符号时,我应该如何使用它:if(dataValue.contains(DataValueModifier.EQUAL.getValue())){...}我知道在这里使用枚举是更好的做法,但这看起来很傻......谢谢,大卫 最佳答案 如果您在枚举中定义了方法boole
enumColor{RED,GREEN,BLUE};classSwitchEnum{publicstaticvoidmain(String[]args){Colorc=Color.GREEN;switch(c){caseRED:System.out.println("red");break;caseGREEN:System.out.println("green");break;caseBLUE:System.out.println("blue");break;}}}上面的代码可以很好地编译并给出预期的输出。我的问题是为什么在创建颜色引用“c”时我们需要通过枚举名称(即Color.GRE
我最近遇到了一个article讨论在C#中使用基于枚举的类实现,这令人印象深刻。第二个here在java。但是,我的同事建议我改用Enum。谁能指出使用它们中的每一个的优缺点以及何时使用它们? 最佳答案 你引用的Java文章是2001年的,当时Java没有枚举,作者描述的方法是当时程序员用来解决Java不足的方法。Java5在2004年引入了枚举,现在旧的模式已经过时了。所以你的同事是对的:你应该使用枚举。 关于java-Java中枚举和基于枚举的类实现之间的优缺点是什么?,我们在Sta
是否有注释或其他方法可以将非详尽的switch语句警告变成错误?如果不是所有值都已在开关中正确处理,我希望某个方法或类产生错误。例子:publicenumE{A,B}在代码的其他地方有一个像这样的枚举开关switch(enumValue){caseA:/*dosomething*/break;}Java会警告您此开关不会处理所有枚举值。我想将此警告变成错误(永久性的,无论个别IDE设置如何)。请记住,在这种情况下,我无法更改原始enum,所以我希望编译器强制执行它。 最佳答案 我知道这是一个旧线程,但在最新的JDK中有一个新答案:S
在内部如何在Enum中进行序列化/反序列化?jvm如何在(序列化)之前和之后(反序列化)生成相同的哈希码? 最佳答案 序列化对enum进行特殊处理。基本上,它只存储对其class的引用和常量的名称。反序列化后,此信息用于查找enum类型的现有运行时对象。因此,如果您在同一运行时反序列化enum常量,您将获得与序列化相同的运行时实例。但是,在另一个JVM中反序列化时,哈希码可能会有所不同。但是具有相同的哈希码并不是单例的必需标准。重要的一点是永远不要有该类的另一个实例,这是有保证的,因为序列化实现永远不会创建enum类型的实例,而只会
我有一个颜色枚举publicenumcolor{GREEN,WHITE,RED}我有包含它的MyEntity。publicclassMyEntity{privateSetcolors;...我已经有一个UserType来映射我的枚举。你知道如何在Hibernatehbm.xml中映射一组枚举吗?我需要UserType还是有最简单的方法?谢谢编辑:只是要说明一下,我正在寻找hbm.xml配置而不是@CollectionOfElements注释 最佳答案 我使用来自EnumSetmapping的解决方案依赖于使用的线程.您只需要一个带有
我有这样的枚举publicenumSizes{Normal(232),Large(455);privatefinalint_value;Sizes(intvalue){_value=value;}publicintValue(){return_value;}}现在我可以调用Sizes.Normal.Value()来获取整数值,但如何将整数值转换回枚举?我现在做的是:publicSizesToSize(intvalue){for(Sizessize:Sizes.values()){if(size.Value()==value)returnsize;}returnnull;}但这是唯一的方
我有实现MyInterface的枚举。在使用该枚举创建其他类时,我想将enumClz限制为已实现MyInterface的类。所以我在泛型类型声明中将签名描述为“TextendsEnum”。public>C1(ClassenumClz){for(TanEnumConst:enumClz.getEnumConstants()){//....process}}令我惊讶的是IDE说它在“TextendsMyInterface”处“意外绑定(bind)”。我不知道这两个字的错误信息是什么意思,有什么解决办法吗?顺便说一句,出于好奇,我有一个奇怪的问题,虽然不是很重要。枚举类型T是否可以等效于以下