Tag: 枚举

Enum元素如何在内部排列或链接?

在Java中,Enum是一种特殊的datatype ,通过查看单词datatype,我得到了一些问题,比如它在内存中预定义的内存大小,或者Enum的元素是否设置为任何data structure如Queue以便快速访问。 根据Java doc The enum declaration defines a class (called an enum type). The enum class body can include methods and other fields. The compiler automatically adds some special methods when it creates an enum The enum declaration defines a class (called an enum type). The enum class body can include methods and […]

处理不再存在的枚举值的反序列化

我有一个包含3个值的枚举JJJ:A,B和C.在我的程序的先前版本中,它有一个额外的值:D。我希望能够读入由以前版本的创建的序列化对象程序,但遇到序列化对象中值为“D”的JJJ类型变量时抛出exception。 最理想的情况是,我希望能够拦截反序列化过程并告诉它在遇到它们时将D’映射到C’。 根据http://docs.oracle.com/javase/6/docs/platform/serialization/spec/serial-arch.html(Enum Constants的序列化),听起来有一种简单的方法可以做到这一点…我知道一种方法是在包含JJJ类型的成员变量的类上覆盖readObject,但由于程序的大小和范围,这将是困难和痛苦的(许多可序列化的类具有类型的成员变量) JJJ和重写readObject来处理JJJ字段意味着我必须手动处理所有其他字段。 我也尝试通过滚动我自己的ObjectInputStream子类来解决这个问题,但不幸的是,我真正需要的枚举反序列化位和覆盖来解决这个问题都是私有的或包私有的…… 有什么建议么?

玩! 框架ENUM和Groovy问题

我有类似以下的东西 – Woman.java … @Entity public class Woman extends Model { public static enum Outcome { ALIVE, DEAD, STILL_BIRTH, LIVE_BIRTH, REGISTER } … } File.java … @Entity public class Form extends Model { … public Outcome autoCreateEvent; … } create.html上 #{select “autoCreateEvent”, items:models.Woman.Outcome.values(), id:’autoCreateEvent’ /} 它将ENUM值保存在DB中,这是可以的。 但是,当我重新加载/编辑时,问题就出现了。 因为它使用ALIVE,DEAD等作为选项的值,所以它无法正确显示列表。 任何洞察力?

在Java中是否可以更改或修改枚举本身,从而破坏枚举单例?

是否有可能以某种方式在运行时更改枚举? 例如使用reflection。 问题不是要改变枚举常量的状态。 它将要更改枚举的常量集或删除任何常量。 关于以下枚举,是否可以添加颜色WHITE或删除颜色RED或更改其顺序? public enum Color { RED, GREEN, BLUE; } 为什么我问? 首先,我想知道它是否可行。 但如果是的话,它会对使用Enum实现单例的常见方式产生影响吗? 我知道这个问题有点恶意。 但即使是约书亚布洛赫在谈论(1)关于实施单身人士并推荐了枚举单身人士模式时也提到了“ 巧妙制造的攻击 ”。 如果我们可以修改枚举,那么对这种模式的攻击是否可行? 我试图解决它并部分管理它。 我将发布我的结果作为答案 – 遵循这个建议 。 (1)请参阅在Java中实现单例模式的有效方法是什么? 其中包含指向effective_java_reloaded.pdf的链接,第31页。

具有有界扩展枚举参数的通用方法 – 无法访问values()方法

我想写一个generics方法,它采用扩展Enum的有界参数。 例如,如果我有一个枚举如下: public enum InputFlags{ ONE (0000001), TWO (0000002), THREE (00000004); public final int value; InputFlags(int value){ this.value = value; } } 然后我可以做以下事情: for (InputFlags ifg : InputFlags.values()){ // Do something with ifg } 但是,如果我尝试在返回参数有界的generics方法中执行上述操作,则无法访问values()方法: public static T getFlags(int f){ T.values(); // NOT allowed, even though I have bounded by extending Enum. } 好像我无法访问generics方法中的values() 。 […]

Java枚举按数字范围搜索

是否可以像下面这样进行枚举 enum { 10 poor 100 rich 1000 very_rich } 所以当我按输入值搜索时,请说101.它会返回“富”吗? 如何在枚举中这样做? 可举个例子吗? 我不想用forloop循环整个枚举来获取string_value。 可能?

scala和java枚举之间的差异

我在SO上读到了一个答案,其中有人说scala枚举是无用的 ,如果你真的需要,你应该只使用java枚举。 虽然我之前使用过java枚举,但我不能说我完全理解它们,因为我在日常工作中不用java编码。 有人可以解释scala和java枚举之间的区别,以及scala枚举中的缺点究竟在哪里?

Java:枚举values()和valueOf(String)

为什么javac将values()和valueOf(String)方法添加到正在定义的枚举类型中? 将它们添加到Enum类本身不是更好吗? 我的意思是,如果我有一些像这样的枚举 enum FooEnum {ONE, TWO} javac在编译时将values()和valueOf(String)到FooEnum 。 我觉得有点奇怪。 这背后的原因是什么? 是否只是为了确保返回值/值的类型安全性还是还有其他什么? 如果只是为了类型安全,那么Generics不会有帮助吗?

inheritance公共接口的枚举中的代码重复

我有几个符合常见界面的枚举: interface TableColumns { String getColumnName(); int getColumnIndex(); ColumnType getColumnType(); boolean isEditable(); int getColumnWidth(); } 典型的实现是: enum PointsTableColumns implements TrendTableColumns { POINTS_COLUMN(“points_column”, false, ColumnType.TEXT, 400, 0); private String columnName; private boolean editable; private ColumnType columnType; private int columnWidth; private int columnIndex; private PointsTableColumns (String columnName, boolean editable, ColumnType columnType, int columnWidth, int columnIndex) { this.columnName […]

如何通过枚举管理generics?

我有一个参数化的界面: public interface MyInterface { void run(T e); } 和实现接口的类: public class MyClass1 implements MyInterface { public void run(SomeOtherClass1 e) { // do some stuff with e } } public class MyClass2 implements MyInterface { public void run(SomeOtherClass2 e) { // do some stuff with e } } 不同的MyClass * X *的数量是已知且详尽的,并且每个MyClass * X *只有一个实例,所以我想使用枚举: […]