我有一个包含用于计算的枚举的类。每个枚举都使用来自外部类的部分或全部非静态变量。但是,由于它们无法访问实例变量,我必须将它们作为参数传递。publicclassOuter{ClassAa;ClassBb;ClassCc;Mapresults=newEnumMap(MyEnum.class);privateenumMyEnum{X{publicdoublecalc(ClassA_a){dostuff}},Y{publicdoublecalc(ClassB_b,ClassC_c){dostuff}},Z{publicdoublecalc(ClassA_a,ClassB_b){dostuff
为什么javac向定义的枚举类型添加values()和valueOf(String)方法?将它们添加到Enum类本身不是更好吗?我的意思是,如果我有一些枚举,例如enumFooEnum{ONE,TWO}javac在编译时将values()和valueOf(String)添加到FooEnum中。我觉得有点奇怪。这背后的原因是什么?只是为了保证返回值的类型安全,还是还有别的?如果仅是为了类型安全,泛型难道没有帮助吗? 最佳答案 它们是静态方法-如何将它们添加到Enum中?静态方法不是多态的。此外,在您提议的方案中,Enum中的实现会是什
我有一个方法,它接受一个枚举并以某种方式使用它。问题是我有许多不同的枚举类型,将枚举传递给方法并不是可接受的做法。 最佳答案 我假设你的意思是你有一堆不同的枚举类,它们意味着不同的东西,并且你想将它们传递到一个方法中。为此,请使用markerinterface:publicinterfaceSpecialEnumType{}然后:publicenumMySpecialEnumTypeimplementsSpecialEnumType{...}publicenumAnotherSpecialEnumTypeimplementsSpec
这个问题在这里已经有了答案:ComparingJavaenummembers:==orequals()?(15个答案)关闭4年前。我有一个枚举,例如enumColor{Red,Brown}。我也有一些这种类型的变量:Colorc1=Brown,c2=Red与常量值比较的最佳方法是什么:if(c1==Color.Brown){//isbrown}或if(c1.equals(Color.Brown)){//isbrown}
我有一个项目,在不同的场景中,我必须处理大型数据集的不同子集。按照我编写代码的方式,有一个Collector接口(interface)和一个类DataCollectorimplementsCollector。DataCollector类是用子集创建条件实例化的,这些条件是枚举。假设数据集是一组100万个英语单词,我想处理由奇数个字母组成的单词子集。然后,我执行以下操作:DataCollectordataCollector=newDataCollector(CollectionType.WORDS_OF_ODD_LENGTH);SetfourLetteredWords=dataColle
是否可以让枚举更改其值(从其内部)?也许用代码更容易理解我的意思:enumRate{VeryBad(1),Bad(2),Average(3),Good(4),Excellent(5);privateintrate;privateRate(intrate){this.rate=rate;}publicvoidincreateRating(){//isitpossibletomaketheenumvariableincrease?//thisis,ifrightnowthisenumhasasvalueAverage,aftercallingthis//methodtohaveitchan
我对JumboEnumSet很苦恼,但没有找到太多关于我们何时以及为什么使用JumboEnumSet的信息。请问有人可以解释一下JumboEnumSet吗? 最佳答案 您无需明确使用它-它只是一个实现细节。基本上,当枚举很小时,EnumSet可以使用非常有效的枚举表示形式作为单个int或long(我忘了是哪个)每个成员一位。当它的元素多于该表示所允许的元素时,将使用JumboEnumSet。您无需担心这一点-只需使用EnumSet上的成员就可以了。请注意,如果您的枚举超过一定大小,那么枚举集会变得更昂贵且效率更低。
这可能会被否决,但这个问题从昨天开始就一直困扰着我。直到我找到一个链接,然后我才知道我并不是真的疯了哈哈:Enumasinstancevariables我基本上是在问与OP问题相反的问题。鉴于:enumCoffee{BIG,SMALL}publicclassMyClass{privateCoffeecoffee;//Constructoretc.}尽管这是Java并且枚举在两种语言中确实有些不同我不能在C#中执行coffee.BIG或coffee.BIG.SMALL(尽管在阅读时意义不大,考虑到coffee是Coffee类型应该是可能的)? 最佳答案
我有一个ENUM作为packagecom.myorg.sparrow.s3Environment;importjavax.annotation.Nonnull;publicenumDocumentType{Document("document/",".xml.gz","binary/octet-stream","gzip",true);privatefinalStringpath;privatefinalStringsuffix;privatefinalStringcontentType;privatefinalStringcontentEncoding;privatefinalBoo
应该返回私有(private)引用类型的所谓“防御副本”。这是为了避免返回私有(private)字段的引用。我想知道私有(private)枚举类型是否有必要。我在某处读到枚举是不可变的引用类型,所以答案应该是“否”。是吗? 最佳答案 枚举不是本质上不可变的——但无论如何你都无法创建防御性副本,因为只有一组固定的实例可用——你有em>返回对现有实例之一的引用,而不是创建新实例。枚举通常应该无论如何都是不可变的,但为了抵消它们本质上不可变的说法:enumBadEnum{INSTANCE;privateintfoo;privateintg