Tag: 枚举

从String转换为具有大量值的Java枚举

假设我有一个包含100个值的枚举。 为简单起见,请参考以下示例: public enum code { CODE_1(“string1”), CODE_2(“string2”), CODE_3(“string3”), CODE_4(“string4”), … } 我想创建一个公共方法,将具有已知格式的字符串(如“string1”,“string2”…)转换为适当的枚举值CODE_1,CODE_2 …通常,这是通过迭代所有值来完成的,如果找到一个匹配项,返回该枚举值。 (详情可在此问题中找到。) 但是,我关注的是对所有值进行reguraly循环。 这可能是一个巨大的瓶颈吗? 如果不是100个元素,那么有1000个? 作为我自己的练习,我尝试使用静态地图优化此查找,这可以确保给定任何字符串的O(1)查找时间。 我喜欢这个额外的噱头,但我只想在我的代码中包含它,如果它确实是必要的。 您对使用迭代方法与地图方法有何看法和想法? public enum Code { … //enum values … //The string-to-Code map private static final Map CODE_MAP = populateMap(); private static Map populateMap() { Map map = new HashMap(); for(Code c : Code.values()) { map.put(c.getCode(), […]

枚举共享静态查找方法

我有以下枚举: public enum MyEnum{ A(10, “First”), // B(20, “Second”), // C(35, “Other options”); private Integer code; private String description; private MyEnum(Integer code, String description) { this.code = code; this.description = description; } public Integer getCode() { return code; } public String getDescription() { return description; } public static MyEnum getValueOf(Integer code) { for (MyEnum e […]

为什么枚举无法在JAVA中解决?

我使用的是J2EE Eclipse Indigo,我有三个类声明如下: public interface ClassA { public static enum TYPE { TYPE1, TYPE2 }; } public interface ClassB extends ClassA { } public class ClassC implements ClassB { System.out.println(TYPE.TYPE1); } ClassC中的TYPE存在编译错误。 它抱怨“枚举不能解决为一种类型”。 它也是ClassA中枚举的警告,它抱怨说: Multiple markers at this line – ‘enum’ should not be used as an identifier, since it is a reserved keyword from […]

如何将Enum嵌套在Enum的值中

我想知道Java中是否可以嵌套Enums。 在这里,我希望能够做到: 有一个enum由CAT和DOG组成的物种可以授予我访问可用CAT和DOG品种的子枚举的权限。 例如,我希望能够测试CAT或DOG,以及动物是PERSAN CAT还是PITBULL DOG。 CAT和DOG品种必须是不同的枚举,即CatBreeds枚举和DogBreeds枚举。 这是我想要使用的访问模式的示例: 物种: Species.CAT Species.DOG 品种: Species.CAT.breeds.PERSAN Species.DOG.breeds.PITBULL

Java:多次使用Enumeration

我使用DefaultMutableTreeNode ,它有方法depthFirstEnumeration() , breadthFirstEnumeration()和children()返回树节点的Enumeration 。 我需要多次使用返回的Enumeration ,但是我在Enumeration找不到像reset()这样的方法。 看起来我只能获取所有元素一次,然后再次调用depthFirstEnumeration()以获得新的Enumeration ,它似乎不是一个好的解决方案。 当然,我可以从Enumeration获取所有元素并将其转换为任何其他可重用表示,但是有多种方法可以多次使用Enumeration吗?

使用注释的Hibernate Enum映射

我有一个现在的数据库,我现在使用hibernate连接到。 我目前无法更改其中的数据,并使所有内容与单列无关。 我有一个状态列,其值为: 新 邮寄 在 出 该列映射如下: @Column(name = “STATUS”, nullable = false, length = 50) @Enumerated(EnumType.STRING) private TeamMemberStatus status; 我真的希望(出于应用程序的原因)将此列映射为Java Enum(TeamMemberStatus), 但由于’new’是Java中的关键字,我不能将其作为枚举成员。 如果我有enum contstants NEW,MAILED,IN和OUT hibernate失败,因为在EnumType内部它会执行一个Enum.valueOf()。 有没有办法让我把它映射到我的Enum而不必编写复杂的UserType? – 添加内容 我的Enum是这样的: public enum TeamMemberStatus { NEW, MAILED, IN, OUT } 是一个有效的Java枚举,但不匹配数据库的情况。 如果我更改它以匹配数据库,如: public enum TeamMemberStatus { new, mailed, in, out } 它不会编译,因为’new’是Java保留字。

每个枚举项的编号?

是否有可能在java中定义这样的东西? C#代码: public enum Character { A = 1, B = 2, C = 4, D = 8 } … Character ch = /* from user */ if(ch & Character.A) { // some operation… } 例如,如果ch设置为Character.B则if结果将为false : ch = 00000000 00000000 00000000 00000010 A = 00000000 00000000 00000000 00000001 —————————————— & 00000000 00000000 00000000 00000000 […]

为什么枚举值不能在switch语句中完全限定?

(注:编辑问题;先前意图不明确) 考虑以下代码: public final class Foo { private enum X { VALUE1, VALUE2 } public static void main(final String… args) { final X x = X.VALUE1; switch (x) { case VALUE1: System.out.println(1); break; case VALUE2: System.out.println(2); } } } 这段代码工作正常。 但是,如果我更换: case VALUE1: // or VALUE2 有: case X.VALUE1: // or X.VALUE2 然后编译器抱怨: java:/path/to/Foo.java:whatever:枚举开关案例标签必须是枚举常量的非限定名称 SO […]

具有概率的枚举的随机值

我有一个枚举,我想随机选择一个值,但不是真正随机的。 我希望到目前为止,某些值不太可能被选中。 这是我到目前为止所拥有的…… private enum Type{ TYPE_A, TYPE_B, TYPE_C, TYPE_D, TYPE_E; private static final List VALUES = Collections.unmodifiableList(Arrays.asList(values())); private static final int SIZE = VALUES.size(); private static final Random RANDOM = new Random(); public static Type randomType() { return VALUES.get(RANDOM.nextInt(SIZE)); } } 是否有一种有效的方法为每个值分配概率? 代码从这里找到

将枚举类型添加到列表中

如果我需要向列表添加枚举属性,我该如何声明列表? 让我们说enum类是: public enum Country{ USA, CANADA; } 我想要做: List l = new ArrayList(); l.add(Country.USA); 需要使用什么而不是List?