草庐IT

java - 为什么Java枚举常量初始化不完整?

我偶然发现了一个非常奇怪的错误,我无法解释它发生的原因。想象一下以下枚举:importjava.awt.Color;publicclasstest{/***@paramargs*/publicstaticvoidmain(String[]args){System.out.println(MyEnum.CONSTANT1.get());System.out.println(MyEnum.CONSTANT2.get());}privateenumMyEnum{CONSTANT1(staticMethod1()),CONSTANT2(staticMethod2());privatestati

java - 在枚举的 Java switch 语句中,为什么在每种情况下限定我的值时都会出现编译错误?

我在Java中有一个switch语句,在一个让我们调用IMyInterface.MyEnum的枚举上我的每个案例陈述都有以下形式:IMyInterface.MyEnum.MyValue,(尽管如果我导入的话我可以删除IMyInterface)。但是,编译器(Java6)会抛出一个错误:“合格的case标签IMyInterface.MyEnum.MyValue必须替换为未合格的枚举常量MyValue”。我显然可以做到这一点,但对于我来说,我不明白这个错误的目的是什么。显然,如果编译器可以处理实际值,它应该能够像处理常量一样处理完全限定名。事实上,我会假设编译器将常量转换为完全限定名称。那

java - 抽象 java 枚举

我写了一个应该依赖枚举的库,但实际的枚举应该由我的库的用户定义。在下面的示例中,authorize方法需要枚举类型的参数Permission。acl.authorize(userX,Permission.READ,Permission.WRITE)我的图书馆应该能够处理图书馆用户定义的任意权限。但是我不能在没有Permission枚举的情况下编译我的库。所以我需要类似的东西abstractenumPermission在我的图书馆。有解决方法吗? 最佳答案 我会使用枚举随后实现的接口(interface)。类似的东西publicint

Java枚举、整数和字符串一起定义?

我想同时定义字符串和整数,但它会出错。publicclassCard{Rankrank;Suitsuit;publicCard(Rankrank,Suitsuit){this.rank=rank;this.suit=suit;}publicenumRank{Ace,9,Queen,King}//andothersuits}错误是token9的语法错误,删除此token。 最佳答案 在Java{Ace,9,Queen,King}中声明枚举时,这些不是字符串和整数。这些是枚举的实际对象。你可以这样做:publicenumRank{Ace

java - 如何避免制作冗长的构造函数

这个问题在这里已经有了答案:Elegantalternativesforhugeamountofargumentsinclassconstructor[closed](4个答案)关闭7年前。我有一个客户端库,我在其中对我的其余服务进行http远程调用,然后返回List返回调用我们图书馆的客户,返回我从我的REST服务得到的响应以及任何错误,如果有任何环绕DataResponse对象。publicclassDataResponse{privatefinalStringresponse;privatefinalbooleanisLink;privatefinalTypeOfIdidType

java - 遍历枚举值的子集

我有一个包含4个值的枚举,并且我有一个接受枚举值的方法签名。我希望能够对所有未作为参数传递给doSomething()的枚举值执行某些操作。publicvoiddoSomething(EnumThingthing){EnumThing[]thingValues=EnumThing.values();ListvaluesNotPassedAsArg=newArrayList();for(EnumThingth:thingValues){valuesNotPassedAsArg.add(th);}valuesNotPassAsArg.remove(thing);//hereIwouldlo

java - 如何在 Java 中比较字符串和枚举类型?

我有一个美国所有州的枚举列表如下:publicenumState{AL,AK,AZ,AR,...,WY}在我的测试文件中,我将从包含状态的文本文件中读取输入。由于它们是字符串,我如何将它与枚举列表的值进行比较,以便为我设置的变量赋值:privateStatestate;我知道我需要查看枚举列表。但是,由于值不是字符串类型,如何比较呢?这是我瞎打出来的。不知道对不对。publicvoidsetState(Strings){for(Statest:State.values()){if(s==State.values().toString()){s=State.valueOf();break

java - 切换枚举值 : case expressions must be constant expressions

我有一个具有以下结构的枚举:publicenumFriends{Peter("PetervonReus","Engineer"),Ian("IandeVilliers","Developer"),Sarah("SarahRoos","Sandwich-maker");privateStringfullName;privateStringoccupation;privatePerson(StringfullName,Stringoccupation){this.fullName=fullName;this.occupation=occupation;}publicStringgetFul

java - 如何在 Java 中创建一个值带有连字符的静态枚举?

如何创建如下所示的静态枚举staticenumTest{employee-id,employeeCode}到目前为止,我遇到了错误。 最佳答案 这对于Java是不可能的,因为每个项目都必须是一个有效的标识符(并且有效的Java标识符不能包含破折号)。最接近的做法是为每个枚举值添加自定义属性或重写toString方法,因此您可以执行以下操作:Test.EMPLOYEE_ID.getRealName();//Returns"employee-id"Test.EMPLOYEE_CODE.getRealName();//Returns"em

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

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