Tag: enums

使用枚举的单身人士

我在stackoverflow上阅读了很多关于使用enum创建单例类的知识。 我一定错过了一些东西,因为我无法在任何地方到达INSTANCE。 这是我的代码: public class UserActivity { private DataSource _dataSource; private JdbcTemplate _jdbcTemplate; static enum Singleton { INSTANCE; private static final UserActivity singleton = new UserActivity(); public UserActivity getSingleton() { return singleton; } } public UserActivity() { this._dataSource = MysqlDb.getInstance().getDataSource(); this._jdbcTemplate = new JdbcTemplate(this._dataSource); } public void dostuff() { … } } 在外面,我正在尝试做 UserActivity.INSTANCE.getSingleton() 要么 […]

使用hibernate注释将枚举映射到表

我有一个表DEAL和一个表DEAL_TYPE。 我想映射这段代码: public class Deal { DealType type; } public enum DealType { BASE(“Base”), EXTRA(“Extra”); } 问题是数据已存在于数据库中。 而且我很难将类映射到数据库。 数据库看起来像这样: TABLE DEAL { Long id; Long typeId; } TABLE DEAL_TYPE { Long id; String text; } 我知道我可以使用简单的@OneToMany关系从交易到交易类型,但我更喜欢使用枚举。 这可能吗? 我几乎使用EnumType.ORDINAL类型工作。 但不幸的是,我的交易类型表中的ID不是顺序的,并且不是从1开始。 有什么建议么?

在运行时Java更改枚举

有没有办法在Java中为内置的枚举类添加元素? 我的问题类似于我可以在Java中添加和删除运行时枚举的元素 ,但这个问题似乎是为了构建自己的枚举然后修改它。 我假设某个地方存在一个我无法改变的枚举,类似于 enum Days{ MONDAY, TUESDAY, WEDNESDAY } 我想在周四,周五等地添加它。 不幸的是,关于如何使用界面来实现我的目标的建议,或其他比枚举更有效的方法,这里不适用。 根据我的理解,枚举是隐式最终的,所以我不能扩展它并添加更多元素。 它有私有字段,但似乎我可以使用reflection来访问那些 – 我可以更改其中一个私有字段,即使我不能添加新字段,即周一到周四更改? 编辑:澄清情况 人们建议在将代码编译到程序之前更改代码。 我的代码是一个我无法改变的大项目的一部分; 在我的类访问它之前,具有枚举的类由较大的程序加载。 那时,我想将缺少的元素添加到枚举中。 字节码操作仍然是要走的路吗?

是否可以为JPA编写通用枚举转换器?

我想为JPA编写一个转换器,将任何枚举存储为UPPERCASE。 我们遇到的一些枚举不遵循惯例只使用大写字母,所以在重构之前我仍然存储未来值。 到目前为止我得到了什么: package student; public enum StudentState { Started, Mentoring, Repeating, STUPID, GENIUS; } 我希望“已启动”存储为“已启动”等等。 package student; import jpa.EnumUppercaseConverter; import javax.persistence.*; import java.io.Serializable; import java.util.Date; @Entity @Table(name = “STUDENTS”) public class Student implements Serializable { private static final long serialVersionUID = 1L; @Id @Column(name = “ID”) @GeneratedValue(strategy = GenerationType.IDENTITY) private Long mId; @Column(name = […]

Java 1.4中枚举的替代方法

由于Java 1.4没有枚举,我正在做这样的事情: public class SomeClass { public static int SOME_VALUE_1 = 0; public static int SOME_VALUE_2 = 1; public static int SOME_VALUE_3 = 2; public void receiveSomeValue(int someValue) { // do something } } receiveSomeValue的调用者应传递这3个值,但他可以传递任何其他int。 如果它是枚举,则调用者只能传递一个有效值。 应该receiveSomeValue抛出一个InvalidValueException吗? 什么是Java 5枚举的好方法?

使用枚举值和注释进行Java字符串validation

我想使用注释针对一组值validation字符串。 我想要的基本上就是这个 @ValidateString(enumClass=com.co.enum) String dataType; int maxValue; int minValue; int precision; 要么 @ValidateString(values={“String”,”Boolean”, “Integer”}) String dataType; int maxValue; int minValue; int precision; 我还想根据dataType中设置的值对其他变量进行一些validation, if(dataType =“String”)maxValue,minValue,precision all应为null或0。 我想不出通过自定义注释实现这一目标的方法。 。 有人请帮帮我

枚举对象应该是无状态的吗?

按设计,java中的枚举常量是单例,为了并发使用,我通常会创建无状态枚举实例并使用方法参数根据需要注入数据。 例: 目前我正在创建一个具有Operations的REST服务(使用策略模式的变体实现为枚举)。 public enum Operation { DO_THIS() { public Result doSomething(Object theData) { } } , // Other Operations go here ; public abstract Result doSomething(Object theData); } 现在我想收集有关操作被调用频率以及成功频率等的数据。 我可以在使用枚举实例时从外部保存状态,但似乎状态应该保存在Operation中,因为操作应该包含它自己的状态。 现在我的一般问题是: 有状态的枚举实例(除了并发问题)是一个糟糕的设计吗?

如何从JNI返回枚举

在java我有: public class MyClass{ public enum STATUS { ZERO, ONE , TWO } public native STATUS nativeGetStatus(); … private STATUS state = nativeGetStatus(); //returns enum private STATUS state2 = nativeGetStatus(); //returns enum } 我希望本机方法’nativeGetStatus’返回此枚举值。 JNI返回整数并与java中的枚举值进行比较是一个选项,但是想知道是否可以通过jobject返回值并将其直接分配给状态? 如果有,怎么样?

Freemarker:如何使用枚举作为键来迭代Map

以下代码不起作用,因为Freemarker似乎将[]中的表达式的值转换为String,然后将其用作键,这不是实际预期的。 准备模板模型: Map myMap; myMap.put(MyEnum.FOO, “Foo”); myMap.put(MyEnum.BAR, “Bar”); templateModel.put(“myMap”, myMap); my.ftl: ${key} = ${value} 在Freemarker文档中,它描述了如何访问Enum本身,但我没有找到任何关于如何使用Enum作为键从哈希值中获取值。 谢谢。

如何在java中使用枚举的线程安全性?

如何在java中使用枚举的线程安全性? 我正在使用枚举实现一个Singleton(根据Bloch的Effective Java),我应该担心我的单例枚举的线程安全吗? 有没有办法certificate或certificate它是线程安全的? // Enum singleton – the preferred approach public enum Elvis { INSTANCE; public void leaveTheBuilding() { … } } 谢谢