jjzjj

Java 枚举(Enums)解析:提高代码可读性与易维护性

接口在Java中,实现抽象的另一种方式是使用接口。接口定义接口是一个完全抽象的类,用于将具有空方法体的相关方法分组://接口interfaceAnimal{publicvoidanimalSound();//接口方法(没有具体实现体)publicvoidrun();//接口方法(没有具体实现体)}实现接口要访问接口方法,必须使用implements关键字(而不是extends)由另一个类“实现”(有点类似于继承)。接口方法的具体实现体由“实现”类提供://接口interfaceAnimal{publicvoidanimalSound();//接口方法(没有具体实现体)publicvoidsle

java - 为什么不能从枚举构造函数调用 super 构造函数?

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

Java: `enum` 与 `String` 作为参数

我一直在阅读System库set和get方法的详细信息,但参数通常是字符串。自从包含enum以来,您是否认为使用String作为参数是不好的做法?更好的选择至少可能是publicfinalString,不是吗? 最佳答案 我认为枚举是比字符串更好的方法。它们是类型安全的,比较它们比比较字符串更快。作为Java1.5之前的替代方案,您可以使用JoshuaBloch在他的EffectiveJava一书中建议的类型安全枚举模式。对于类型安全的枚举,另请参阅http://www.javacamp.org/designPattern/enum

Java:访问枚举(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 - 为什么这个转换器需要类型转换?

我需要在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

java - 泛型和类 <?扩展 Enum<?>>,EnumSet.allOf(class) 与 class.getEnumConstants()

我有以下BeanValidation代码可以正常工作,并允许验证注释的bean:@EnumValue(enumClass=MyTestEnum.class)privateStringfield;publicenumMyTestEnum{VAL1,VAL2;}只有当字段值为“VAL1”或“VAL2”时才会被验证。publicclassEnumNameValidatorimplementsConstraintValidator{privateSetAVAILABLE_ENUM_NAMES;@Overridepublicvoidinitialize(EnumValueenumValue){C

c++ - C/C++ : size of a typedef struct containing an int and enum == sizeof(int)?

我在我的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

c++ - 隐式转换产生 "error: taking address of temporary"(GCC vs clang)

在试验强类型整数时,我遇到了一个来自GCC8.2的奇怪错误:error:takingaddressoftemporary我可以想象上述错误有意义的典型场景,但在我的情况下我没有遇到问题。重现错误的缩小(人为)示例如下:#include#includeenumclassEnum:std::size_t{};structPod{std::size_tval;constexproperatorEnum()const{returnstatic_cast(val);}};templateconstexprvoidfoo(){usingFoo=std::integral_constant;//[G

c++ - 编译器对带有元组参数的函数的混淆

我正在使用Apple的LLVM4.2编译器来编译此C++代码。我用不同的元组组合重载了一个成员函数,我相信我正确地调用了其中一个,但编译器发现了歧义。本质上,我试图调用下面的方法(1),但编译器发现方法(2)也可以接受/兼容。这是为什么?我打开了C++11标志。enumclassEnum1{...}enumclassEnum2{...}enumclassEnum3{...}enumclassEnum4{...}voidmyMethod(){Enum1e1;Enum2e2;Enum3e3;doSomething({e1,e2,e3});//shouldpick(1),yetcompile

C++11,枚举类,g++ 的 undefined reference ,与 clang++ 一起工作

我使用了新的C++11“枚举类”类型,并在使用g++时观察到“undefinedreference”问题。这个问题不会发生在clang++中。我不知道是我做错了什么还是g++错误。重现问题的代码是:(4个文件:enum.hpp、enum.cpp、main.cpp和Makefile)//file:enum.hppenumclassMyEnum{val_1,val_2};templatestructFoo{staticconstMyEnumvalue=MyEnum::val_1;};templatestructFoo{staticconstMyEnumvalue=MyEnum::val_2