Tag: enums

Java:如何编写接受实现给定接口的Enum常量的generics函数?

所以我有一堆枚举,它们都扩展了一个接口: public interface MyInterface {} 然后我有几个扩展界面的枚举: public enum A implements MyInterface {} public enum B implements MyInterface {} 我想要一个只接受扩展此接口的枚举的函数。 我不能做: public void MyFunction(MyInterface input) 因为,在函数内部,我使用EnumSet.of(输入)创建一个EnumSet。 我做了 public <T extends Enum> void myFunction(T input) 因为,在函数内部,我需要创建一个需要传递给另一个函数的Map。 那么有没有任何类型安全的方法来做这个没有铸造? 编辑:更正的接口定义。

使用setter将服务注入Enum ……糟糕的做法?

这被认为是不好的做法吗? 基本上,基于枚举我想在接口中调用特定方法。 每个枚举都有自己的接口实现(WalkImpl,RunImpl,JogIMpl等),所有这些都基于ActivityService接口。 我只是想知道这是将服务“注入”Enum的正确方法。 我这样做是因为我无法自动提供服务。 谢谢 @Component public class HelloWorldImpl implements HelloWorld { private enum MyEnum{ WALK { @Override public void execute() { System.out.println(“I am walking”); activityService.doSomethingWithMe(this.name()); } }, RUN{ @Override public void execute() { System.out.println(“I am running”); } },JOG{ @Override public void execute() { System.out.println(“I am jogging!”); } }, SKIP{ @Override public void execute() […]

使用Gson使用自定义序列化序列化枚举映射

按照使用GSON解析JSON时使用枚举的建议,我试图使用Gson序列化其键是enum的映射。 考虑以下课程: public class Main { public enum Enum { @SerializedName(“bar”) foo } private static Gson gson = new Gson(); private static void printSerialized(Object o) { System.out.println(gson.toJson(o)); } public static void main(String[] args) { printSerialized(Enum.foo); // prints “bar” List list = Arrays.asList(Enum.foo); printSerialized(list); // prints [“bar”] Map map = new HashMap(); map.put(Enum.foo, true); printSerialized(map); // […]

如何在多个枚举中重用代码

我们知道java enum类: 隐式扩展java.lang.Enum; 不能从任何其他枚举类扩展。 我有多个枚举类,如下所示: enum ResourceState { RUNNING, STOPPING,STARTTING;//… void aMethod() { // … } } enum ServiceState { RUNNING, STOPPING,STARTTING,ERROR;//… void aMethod() { // … } } 枚举ResourceState和ServiceState的方法aMethod()完全相同。 在OOP中,如果ResourceState和ServiceState不是枚举,则它们应该将相同的方法抽象为超级抽象类,如下所示: abstract class AbstractState{ void aMethod() { // … } } 但是ResourceState无法从AbstractState扩展,你有什么想法可以解决吗?

Spring JPA – 枚举中枚举字段的默认值

我们有一个带有枚举字段的实体 – emailCommunicationStatus ,我们想要使用JPA注释为其设置默认值 – ‘UNKNOWN’ 。 但是,当我们将实体保存到DB时,此字段的值为null而不是。 对于布尔字段 – isLocked ,保存正确的默认值( false )。 @Entity public class Account { @Id @GeneratedValue @Column(name = “id”) protected Long id; @Column(columnDefinition = “boolean default false”) private boolean isLocked; @Column(length = 32, columnDefinition = “varchar(32) default ‘UNKNOWN'”) @Enumerated(value = EnumType.STRING) private CommunicationStatus emailCommunicationStatus; PlayerAccount() { super(); } } public […]

控制Hibernate EnumType.STRING属性的排序顺序

目前,我的项目使用@Enumerated(EnumType.ORDINAL) ,所以当我按此列排序时,它是根据enum的顺序进行排序,这很好。 但我需要在enum添加一些额外的值,这些值需要插入枚举值列表中的不同位置,并且不能仅添加到底部以维持正确的排序顺序。 如果我这样做,我的数据库将搞砸。 我将不得不编写一些脚本来将所有这些序数值转换为正确的新序数。 以后可能需要添加更多状态。 因为我必须修复数据库中的所有数据,所以我只想做一次,因为这将是一项艰巨的任务。 所以我想切换到EnumType.STRING ,不必再次重新映射数据库中的序号值。 但是,如果我这样做,那我该怎么排序呢? 枚举字符串的字母顺序不是我需要的顺序。 使用下面的类,当我按属性“status”排序时,结果按以下顺序排列: hql = “from Project order by status” Development Planning Production 我希望他们按此顺序出现,而不使用EnumType.ORDINAL : Planning Development Production 如果没有为enum创建表,或者向Project类添加其他列,是否可以这样做? 我试过这个,但它引发了一个exception: hql = “from Project order by status.sort” 枚举: public enum Status { PLANNING(“Planning”, 0), DEVELOPMENT(“Development”, 1), PRODUCTION(“Production”, 2); private final String name; private final int sort; […]

Apache Commons Lang3 Hashcode,Equals和ToString包括Enums

我们为服务响应和模型中的请求对象定义了很少的数据类型。 最近我们发现需要在所有这些类型上实现ToString,HashCode和Equals ,以便在比较和断言上使用它们。 从少数几个来源确认在Java中覆盖equals和hashCode时应该考虑哪些问题? , 正确的方法来实现等于合同等我们遵循使用org.apache.commons.lang3.builder.EqualsBuilder , HashCodeBuilder和ToStringBuilder实现toString,equals和hashcode,如下所示 – Response.java import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apache.commons.lang3.builder.ToStringBuilder; public class Response { private Integer value; private Currency currency; private Object edited; public Response() { } public Response(Integer value, Currency currency, Object edited) { this.value = value; this.currency = currency; this.edited = edited; } public Currency getCurrency() { […]

枚举抽象问题

我目前正在努力解决java抽象问题。 我有这样的事情: public interface State { }; public interface Dynamics { getObservationChance(State state, Observation observation); }; class SpecialState implements State { }; enum SpecialObservation() { FREE, WALL, etc. } class SpecialDynamics implements Dynamics { getObservationChance(State state, Observation observation) { // state should be SpecialState, observation should be SpecialObservation! } }; class Main { Main(State state, […]

用于Java中不同枚举类的联合的switch语句

我有两个枚举类,比如Enum1和Enum2: enum Enum1 {ONE, TWO, THREE} enum Enum2 {FOUR, FIVE} 我有一个像这样的方法: public <E extends Enum> method (E arg) { switch (arg) { // Here is the compile error — Cannot switch // on a value of type E. Only convertible int // values, strings or enum variables are permitted // (And of course, all the […]

打字稿枚举的构造函数?

我们的代码目前处于一种情况,我们在Java层中使用Enums,它使用如下构造函数存储id和’display value’: public enum Status implements EnumIdentity { Active(1, “Active”), AwaitingReview(2, “Awaiting Review”), Closed(3, “Closed”), Complete(4, “Complete”), Draft(5, “Draft”), InProcess(6, “In Process”), InReview(7, “In Review”), NotStarted(8, “Not Started”), PendingResolution(9, “Pending Resolution”), Rejected(10, “Rejected”); private int id; private String displayValue; PlanStatus(final int id, String displayValue) { this.id = id; this.displayValue = displayValue; } /** {@inheritDoc} */ […]