Tag: enums

如何从枚举创建下拉菜单?

如何在JSP中显示枚举结构的值? 我使用Spring MVC来实现我的项目。 非常感谢! public enum ProjectStatusEnum { INITIAL(0,”Initial”),ONGOING(1,”Ongoing”),CLOSED(2,”Closed”); private int value; private String key; ProjectStatusEnum(int value , String key){ this.value=value; this.key = key; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } public String getKey() { return key; } public void setKey(String key) { this.key = […]

线程安全的Enum Singleton

枚举有助于创建单身人士。 我知道枚举方法不是线程安全的,所以我试着让它成为线程安全的。 任何人都可以确认这种实施是否正确。 是否可以使用静态和易失性这么多地方并且可以进行优化? 由于内部类是私有的,因此我必须在枚举中创建函数以访问内部类function。 可以优化吗? import java.util.Date; public enum SingletonWithEnum { INSTANCE; private static class Singleton{ private static volatile int count; private static volatile Date date; public static int getCount() { return count;} public static void setCount(int countParam) { synchronized(Singleton.class){ count = countParam; }} public static Date getDate() { return date;} public static void […]

Eclipse JDT ASTParser错误地转换枚举声明节点

我正在使用JDT分析Java代码,并依赖于org.eclipse.jdt.core包而不是eclipse插件来构建独立的分析工具。 但我发现我的工具在Java代码中出现的枚举声明节点上无法正常工作。 在由jdt创建的AST中,关键字enum被视为typename而不是enum声明。 所以我想知道我应该怎样才能确保我的工具能够正确处理枚举声明。 我使用的jdt包是“org.eclipse.jdt.core_3.8.3.v20130121-145325.jar”。 createAST代码是: char[] javaprogram=getJavaFile(javaFileName); ASTParser parser = ASTParser.newParser(AST.JLS4); parser.setSource(javaprogram); parser.setKind(ASTParser.K_COMPILATION_UNIT); final CompilationUnit cu = (CompilationUnit) parser.createAST(null); java输入如下: package test; enum Color { RED(255, 0, 0), BLUE(0, 0, 255), BLACK(0, 0, 0), YELLOW(255, 255, 0), GREEN(0, 255, 0); private int redValue; private int greenValue; private int blueValue; private Color(int rv, int gv, […]

Enum类型,如Joshua Bloch在Effective Java中所述

请看这个链接 。 关于Enums,布洛赫先生说 Java的枚举类型是通过公共静态最终字段为每个枚举常量导出一个实例的类。 我阅读了Enum类文档,但没有公共静态final字段 ,那么上述语句如何成立。 请解释。 谢谢

为什么Java枚举不可克隆?

改变问题为时已晚,但更为精确的是问“为什么克隆()不允许单身人士?”。 copy()方法会更方便。 是否有任何理由不能克隆Java中的枚举? 手册说明了这一点 这保证了枚举永远不会被克隆,这是保持其“单身”状态所必需的。 但是返回实例本身也会保留其状态,并且我能够以与其他可克隆对象相同的方式处理关联的枚举。 有人可能会说 [clone]的一般意图是,对于任何对象x,表达式: x.clone() != x将为true,[…] 但对于单身人士来说,我希望x.clone() == x为真。 如果返回实例本身,则单例模式对引用对象是透明的。 那么,当指定了clone()时,为什么不允许克隆枚举或者忘记考虑单例和不可变因素?

Java Enums – 在枚举上切换语句与访问者模式 – 性能优势?

我一直在寻找这个基于性能的问题的答案。 到目前为止,在挖掘了互联网之后,我了解到有几种方法可以在java中使用Enums, 这里有详细记载。 好吧,作为一个初学者,我希望在switch-case语句中使用Enums,这样可以提供清晰度并更好地理解代码。 但另一方面,我们还有一个访问者模式样式的Enums实现,它确保了类型的安全性和可扩展性, 这里讨论。 话虽如此,并回到这个问题背后的原始想法,到目前为止,我已经了解到如果使用Enums正确设计switch-case结构,这确保了case值不稀疏,并且Enum声明是相同的编译单元作为switch-case语句,java编译器通过实现跳转表这样的构造对生成的字节码执行一些优化(在这里和其他地方讨论过,在Sun的网站上,我丢失了链接)。 现在,与多个/嵌套的if-else构造相比,这肯定会提升性能。 我的问题是,java如何在生成的字节码中实现基于访问者模式的Enums实现,与基于switch-case的实现相比,性能提升是什么? 我应该选择哪种类型的实现,考虑到我的Enums可能在未来增长,我也热衷于性能。 目前,我的Enum中有一些19和奇数常量。 编辑 我有一个类存储有关游戏变量的一些信息。 其中一个变量是Enum类型。 public class GameObject { private Shape mShape; public Shape getShape() { return mShape; } . . . public static enum Shape { SHAPE1, SHAPE2, SHAPE3, SHAPE4, …, SHAPE20 }; public void drawShape() { switch (this.mShape) { case SHAPE1: drawShape1(); break; case […]

我可以使用EL从JSP访问枚举类的值吗?

我有一个枚举类USState 。 我想在JSP中遍历状态。 没有先将这样的列表设置为属性,是否可以访问USState列表? 看起来像enum一样静态的东西应该总是可用的,但我无法弄清楚如何去做。 这就是我要找的东西:(工作除外) ${state}

GWT和Enum的问题

我在GWT应用程序的客户端部分有一个枚举,当我尝试运行与序列化问题相关的exception时,我得到一个exception。 我做错了吗? 我读到GWT支持枚举,我使用的是最后一个版本。 枚举: public enum AnEnum implements Serializable { ITEM_A(“Item a description”), ITEM_B(“Item b description”); private String description; private AnEnum(String description) { this.description = description; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } } 例外: Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at […]

为什么枚举类型上的私有字段对包含类可见?

public class Parent { public enum ChildType { FIRST_CHILD(“I am the first.”), SECOND_CHILD(“I am the second.”); private String myChildStatement; ChildType(String myChildStatement) { this.myChildStatement = myChildStatement; } public String getMyChildStatement() { return this.myChildStatement; } } public static void main(String[] args) { // Why does this work? System.out.println(Parent.ChildType.FIRST_CHILD.myChildStatement); } } 在参考此枚举时,是否存在关于Parent子类,同一包中的类等的访问控制的其他规则? 我在哪里可以找到规范中的规则?

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

我在Java上有一个switch语句,在Enum上我们可以调用IMyInterface.MyEnum 我的每个case语句都有以下forms:IMyInterface.MyEnum.MyValue,(虽然我可以在导入时删除IMyInterface)。 但是,编译器(Java 6)会抛出一个错误:“必须用unqalified枚举常量MyValue替换合格的case标签IMyInterface.MyEnum.MyValue”。 我显然可以这样做,但对于我的生活,我不明白这个错误的目的是什么。 显然,如果编译器可以处理实际值,它应该能够处理完全限定名称,就像它对常量一样。 实际上,我会假设编译器将常量转换为完全限定名。 那么,Java大师们,这背后的理由是什么? 谢谢!