Tag: 枚举

是否可以扩展Java Enums?

这是我想要完成的,我有一个类具有一些值的枚举,我想inheritance它并为枚举添加更多的值。 这是一个糟糕的例子,但是: public class Digits { public enum Digit { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } } public class HexDigits extends Digits { public enum Digit { A, B, C, D, E, F } } 以便HexDigits.Digit包含所有hex数字。 那可能吗?

Hibernate枚举映射

我需要事先将未实现接口的枚举映射到现有数据库,现有数据库使用@Enumerated(EnumType.STRING)将枚举存储在与所有者类相同的表中。 class A { HasName name; } interface HasName { String getName(); } enum X implements HasName { John, Mary; public String getName() { return this.name(); } } enum Y implements HasName { Tom, Ann; public String getName() { return this.name(); } } 在这种情况下应该如何处理映射? 持久化到数据库不会改变,因为实现接口的所有枚举都将具有不同的值,但我不确定如何从数据库中检索对象(我是否需要自定义映射器,它将尝试实例化枚举使用指定的枚举类?Hibernate本身是否支持此function?)。

枚举方法覆盖

我发现Enum的定义如下: public Enum MyEnum { ONE { @Override public int getSomething() { return 1; } }, TWO { @Override public int getSomething() { return 2; } } int getSomething() { return 0; } } 不知何故,我觉得这种实现有些不适,因为我认为理想情况下应该为此目的定义一个字段,类应该类似于: public Enum MyEnum{ ONE(1), TWO(2) private int theSomething; private MyEnum(int something) { theSomething = something; } int getSomething() { return […]

切换java中的类型

在开始之前,我知道这个问题有很多答案可以提出替代方法。 我正在寻求对这种特殊方法的帮助,以确定是否可行,如果不可能,可能有效的类似方法。 我有一个方法,它接受一个超类,并根据传递的对象的类型调用一个方法。 例如: public void handle(Object o){ if (o instanceof A) handleA((A)o); else if (o instanceof B) handleB((B)o); else if (o instanceof C) handleC((C)o); else handleUnknown(o); 我不能修改子类型来覆盖handle()方法,正如这个答案所暗示的那样,因为我不拥有这些类。 所以我的方法就是instanceof 。 我想使用switch语句而不是if/else ,因为它更整洁。 我知道你只能打开基元和字符串,所以我要切换类名: switch(o.getClass().getCanonicalName()){ case “my.package.A”: handleA((A)o); break; case “my.package.B”: handleB((B)o); break; case “my.package.C”: handleC((C)o); break; default: handleUnknown(o); break; } 这里的问题是规范名称非常长(如12个子包),我不能在case语句中调用ClassName.class.getCanonicalName() ,因为Java不允许这样做。 所以我的下一个解决方案是Enum。 这是我遇到问题的地方。 我希望我的代码看起来像这样: […]

Java中的枚举类初始化

在Java中,我们可以执行以下操作来初始化该类中的类和调用方法: public class MyClass { public String myClassMethod() { return “MyClass”; } } 。 public class Test { public static void main(String[] args) { MyClass myClass = new MyClass(); // initialize MyClass myClass.myClassMethod();// call a method } } 如果我的类是enum类,则实现如下: public enum MyEnumClass { INSTANCE; public String myEnumClassMethod() { return “MyEnumClass”; } } 。 public class […]

如何使用id检索枚举名称?

我的enum为: public enum EnumStatus { PASSED(40L, “Has Passed”), AVERAGE(60L, “Has Average Marks”), GOOD(80L, “Has Good Marks”); private java.lang.String name; private java.lang.Long id; EnumStatus(Long id, java.lang.String name) { this.name = name; this.id = id; } public java.lang.String getName() { return name; } public java.lang.Long getId() { return id; } } 我必须使用id(40,60,80)获得Enum名称( PASSED , AVERAGE , GOOD […]

Java 5+中的静态字符串常量VS枚举

我已经阅读了这个问题和答案: 在Java中实现常量的最佳方法是什么? 并提出了一个决定,即枚举是实现一组常量的更好方法。 另外,我在Sun网站上阅读了一个如何将行为添加到枚举的示例(请参阅前面提到的post中的链接)。 因此,将带有String键的构造函数添加到枚举中以保存一堆String值没有问题。 这里的唯一问题是我们需要添加“.nameOfProperty”来访问String值。 所以代码中的每个地方我们都需要通过它的名称(EnumName.MY_CONSTANT)来解决常量值,但是就像那样(Enum.MY_CONSTANT.propertyName)。 我在这儿吗? 你怎么看呢?

保留适合枚举的数据

大多数项目都有某种类型的数据,这些数据在发行版之间基本上是静态的,非常适合用作枚举,如状态,事务类型,错误代码等。例如,我只使用一个公共状态枚举: public enum Status { ACTIVE(10, “Active”); EXPIRED(11, “Expired”); /* other statuses… */ /* constructors, getters, etc. */ } 我想知道其他人在这些数据的持久性方面做了些什么。 我看到一些选项,每个选项都有一些明显的优点和缺点: 在状态表中保留可能的状态,并保留所有可能的状态域对象,以便在整个应用程序中使用 只使用枚举,不要保留可用状态列表,在我和我的DBA之间创建数据一致性圣战 保持状态并在代码中维护枚举,但不要将它们绑定在一起,从而创建重复的数据 我的偏好是第二种选择,虽然我的DBA声称我们的最终用户可能想要访问原始数据来生成报告,而不是持久化状态会导致数据模型不完整(反驳:这可以通过文档解决) 。 大多数人在这里使用会议吗? 人们对每个人的经历是什么,还有其他选择吗? 编辑: 在考虑了一段时间之后,我真正的持久性斗争来自于处理与数据库中的状态相关联的id值。 安装应用程序时,这些值将作为默认数据插入。 此时,它们具有可用作其他表中的外键的ID。 我觉得我的代码需要知道这些ID,以便我可以轻松检索状态对象并将它们分配给其他对象。 我该怎么办? 我可以添加另一个字段,比如“代码”,查看内容,或者只是按名称查找状态,这是icky。

使用Enum的序数值来索引Java中的数组是不好的做法吗?

我有两个数组:Walls和Neighbors。 public boolean[] walls = new boolean[4]; public Cell[] neighbors = new Cell[4]; 我有一个枚举: enum Dir { North, South, East, West } 现在,我希望能够按照他们的方向访问墙壁或邻居,所以我不必传递一堆魔法索引。 但是,当我阅读Enum.ordinal()的文档时,它说程序员几乎没有使用这种方法,这让我认为它不应该以这种方式使用。 我想做的事情如下: List availableDirections = new ArrayList(); for(Dir direction : Dir.values()) if (!Neighbors[direction.ordinal()].Visited) availableDirections.add(direction); 甚至: return Neighbors[Dir.North.ordinal()]; 我应该恢复使用设置为索引值的NORTH,SOUTH,EAST,WEST的静态常量还是使用Enum的序数方法?

枚举中的枚举

这不是我被困住的问题,而是我正在寻找一种整洁的方式来编写我的代码。 基本上,我正在编写一个事件驱动的应用程序。 用户触发事件,事件被发送到适当的对象,对象处理事件。 现在我正在编写偶数处理程序方法,我希望使用switch语句来确定如何处理事件。 现在,当我正在研究一般结构时,事件类非常简单: public class Event { public static enum Action { MOVE, FOO, BAR } private Action action; private int duration; public Event(Action action, int duration) { this.action = action; this.duration = duration; } public Action getAction() { return action; } public int getDuration() { return duration; } 然后,在另一堂课中,我会有类似的东西: public void handleEvent(Event […]