我和一位同事讨论了Java如何表示枚举。我的印象是它们是严格的整数,就像C/C++。或者,如果您添加行为(类型安全枚举),它会被包装在一个类中。他相信,如果它足够小,Java会把它压缩到一个字节。但是,我在Oracle站点上发现了这个:Javaprogramminglanguageenumsarefarmorepowerfulthantheircounterpartsinotherlanguages,whicharelittlemorethanglorifiedintegers.Thenewenumdeclarationdefinesafull-fledgedclass(dubbeda
我正在为下面的ENUm类编写JUNIT测试用例。我的下面的类(class)只会给我运行代码的当前机器的主机名。当我编写JUNIT测试时,我如何模拟下面的类,以便我可以随时更改getHostName()方法,以便每当我调用getDatacenter(),它可以通过模拟它返回我传递的任何主机名。我不想将其作为参数化。我只想测试某些情况,同时在模拟时更改主机名。publicenumDatacenterEnum{DEV,DC1,DC2,DC3;publicstaticStringforCode(intcode){return(code>=0&&code 最佳答案
我需要有关在JPA2中存储映射的帮助,其中键和值都是枚举(Map)。使用Hibernate作为我的JPA提供程序,它将枚举存储为blob,但我需要将数据存储为字符串。我尝试了以下注释来解决这个问题:@ElementCollection(fetch=FetchType.EAGER)@MapKeyEnumerated(value=EnumType.STRING)publicMapgetElementsMap(){returnelementsMap;}但是数据仍然作为blob存储在数据库中。有人解决过这个问题吗? 最佳答案 @Enumer
如何通过ClassLoader或类似机制实例化Enum类型?(我试图将所有内容都保存在独立服务器应用程序的同一上下文类加载器下)。我有这样的东西:ClassLoaderloader=newCustomClassLoader(parent,libDir);Thread.currentThread().setContextClassLoader(loader);//troubleareaClasscontainerClass=loader.loadClass("com.somepackage.app.Name$SERVER");我错误地认为只需加载Enum就足以启动它(它的私有(priva
publicenumA{A(1);privateA(inti){}privateA(){super();//compile-error//CannotinvokesuperconstructorfromenumconstructorA()}}这里是enumA的层次结构extendsfromabstractjava.lang.Enumextendsjava.lang.ObjectClassc=Class.forName("/*path*/.A");System.out.println(c.getSuperclass().getName());System.out.println(Modi
我一直在阅读System库set和get方法的详细信息,但参数通常是字符串。自从包含enum以来,您是否认为使用String作为参数是不好的做法?更好的选择至少可能是publicfinalString,不是吗? 最佳答案 我认为枚举是比字符串更好的方法。它们是类型安全的,比较它们比比较字符串更快。作为Java1.5之前的替代方案,您可以使用JoshuaBloch在他的EffectiveJava一书中建议的类型安全枚举模式。对于类型安全的枚举,另请参阅http://www.javacamp.org/designPattern/enum
阅读SCJP书,我在第1章“自测”中发现了类似的内容:enumAnimals{DOG("woof"),CAT("meow"),FISH("burble");Stringsound;Animals(Strings){sound=s;}}classTestEnum{staticAnimalsa;publicstaticvoidmain(String[]args){System.out.println(a.DOG.sound+""+a.FISH.sound);//thefollowinglineisfrommeSystem.out.println(Animals.DOG.sound+""+A
我需要在java中实现一个枚举到枚举的转换器:Enum_2>Enum_1,我想以通用的方式进行。所以我定义了一个接口(interface):interfaceLabelAware{StringgetLabel();TgetObject();}和Enum_1:enumEnum_1{A,B;StringgetValue(){return"whatever";}}和实现了LabelAware的Enum_2需要转换成Enum_1:enumEnum_2implementsLabelAware{C("c",Enum_1.A),D("d",Enum_1.B);privatefinalStringla
我有以下BeanValidation代码可以正常工作,并允许验证注释的bean:@EnumValue(enumClass=MyTestEnum.class)privateStringfield;publicenumMyTestEnum{VAL1,VAL2;}只有当字段值为“VAL1”或“VAL2”时才会被验证。publicclassEnumNameValidatorimplementsConstraintValidator{privateSetAVAILABLE_ENUM_NAMES;@Overridepublicvoidinitialize(EnumValueenumValue){C
我在我的Ubuntu(i686)上使用gcc版本4.3.3。我写了一个精简的测试程序来描述我缺乏理解和我的问题。该程序应告诉我我实现的结构的大小。所以我有一个typedefstruct用于Message和一个小的main来玩:#includetypedefstruct{intsize;enum{token=0x123456};}Message;intmain(intargc,char*argv[]){Messagem;m.size=30;printf("sizeof(int):%d\n",sizeof(int));printf("sizeof(0x123456):%d\n",sizeo