Tag: 枚举

从Class 使用String值?

我发现很难将确切的问题写成文字,所以我只想举个例子。 我有两种Enum类型: enum Shape { CAT, DOG; } enum Color { BLUE, RED; } 我有一个方法: public Object getInstance(String value, Class type); 我想用这样的方法: // someValue is probably “RED”, and someEnumClass is probably Color.class Color c = getInstance(someValue, someEnumClass); 我一直无法确定如何实现getInstance() 。 一旦知道要实例化的确切Enum类,就很容易: Color.valueOf(“RED”); 但是如何用一个未知的Class完成上述这一行呢? (但是,已知someEnumClass是Enum的子类。) 谢谢!

Javagenerics的generics

我有一个表示文本片段的generics类。 该文本片段可以具有许多不同模式中的任何一种(不同类型的突出显示)。 这些模式由Enum表示。 每个项目的枚举可能不同,但它必须实现一个界面,该界面提供了一种方法来组合其中的两个(可以突出显示和加粗)。 所以我有一个界面: public interface TextFragmentMode<E extends Enum> { /** * Will combine the supplied mode with the current mode and return the * result. * * @param mode The mode to combine with. * @return The combined mode. */ public E combine( E mode ); } 然后我的TextFragment是一个文本字符串和一个模式的容器。 但是当我尝试宣布这个课时: public class TextFragment<E extends […]

Java枚举和generics

这件事现在困扰我一段时间了。 我以前曾问过问题 ,但可能是一个不好的措辞和一个过于抽象的例子。 所以我不清楚我究竟在问什么。 我会再尝试。 请不要妄下结论。 我希望这个问题根本不容易回答! 为什么我不能在Java中使用generics类型参数的枚举? 问题不在于为什么它在语法上是不可能的。 我知道它不受支持。 问题是:为什么JSR人员“忘记”或“省略”这个非常有用的function? 我无法想象与编译器相关的原因,为什么它不可行。 这就是我喜欢做的事情。 这在Java中是可行的。 这是创建类型安全枚举的Java 1.4方法: // A model class for SQL data types and their mapping to Java types public class DataType implements Serializable, Comparable<DataType> { private final String name; private final Class type; public static final DataType INT = new DataType(“int”, Integer.class); public […]

Jackson:将枚举值序列化和反序列化为整数

考虑以下枚举和类: public enum State { ON, OFF, UNKNOWN } public class Machine { String name; int numCores; State state; public Machine(String name, int numCores, State state) { this.name = name; this.numCores = numCores; this.state = state; } } 并考虑以下主要function: public static void main(String args[]) { Machine m = new Machine(“Machine 1”, 8, OFF); ObjectMapper mapper […]

何时在Java中使用Enum或Collection

在什么情况下枚举更适合比例如保证独特元素的集合(java.util.Set的实现者,我猜……)? (这是我之前的问题的后续跟进)

如何在Java中使用reflection创建枚举实例?

当我阅读Effective Java时 ,作者告诉我单元素enum类型是实现单例的最佳方式,因为我们不必考虑复杂的序列化或reflection攻击。 这意味着我们无法使用reflection创建enum实例,对吧? 我做了一些测试,这里有一个enum类: public enum Weekday {} 然后我尝试创建一个Weekday的实例: Class weekdayClass = Weekday.class; Constructor cw = weekdayClass.getConstructor(null); cw.setAccessible(true); cw.newInstance(null); 如你所知,它不起作用。 当我将关键词enum更改为class ,它可以工作。 我想知道为什么。 谢谢。

Enum#values()是否在每次调用时分配内存?

我需要将一个序数int值转换为Java中的枚举值。 这很简单: MyEnumType value = MyEnumType.values()[ordinal]; values()方法是隐式的,我无法找到它的源代码,因此问题。 MyEnumType.values()是否分配了一个新数组? 如果确实如此,我应该在第一次调用时缓存数组吗? 假设转换将经常被调用。

枚举VS类VS接口

我一直在阅读本网站上有关常量用法的大量post。 问题:我应该何时使用枚举作为常量,使用类或接口。 我看到我想要解决的两个关键情况。 1.多个项目在应用程序中使用的全局常量。 例: 常见的日志字符串 容器引用,如WebSphere EAR中使用的数据库映射引用 2.对象特定常量 例: 员工对象的员工工资率 从我读过的所有内容来看,这就是我认为我掌握的内容以及我正在寻找的意见。 对于情况1:设计方法:使用最终类和静态导入。 在这里看到: 接口常量的用途是什么? 对于情况2:设计方法:应用Enums来表示这些常量作为对象。 要记住的其他要点: 如果常量字符串属于该类,并且您只需要在使用它的类中保留字符串值 不要在情况​​1中使用接口。如上面链接中提到的Constant Interface Anti-pattern。 。 提前感谢您的想法和意见。

我可以根据其字段的值获得枚举吗?

我想根据其字段值获取特定的枚举。 枚举: public enum CrimeCategory { ASBO (“Anti Social Behaviour”), BURG (“Burglary”), CRIMDAM (“Criminal Damage And Arson”), DRUGS (“Drugs”), OTHTHEFT (“Other Theft”), PUPDISOR (“Public Disorder And Weapons”), ROBBERY (“Robbery”), SHOPLIF (“Shoplifting”), VEHICLE (“Vehicle Crime”), VIOLENT (“Violent Crime”), OTHER (“Other Crime”); private String category; private CrimeCategory (String category) { this.category = category; } public String returnString() […]

单例模式:使用枚举版本

我不明白如何实现Singleton模式的Enum版本。 下面是使用Singleton模式实现“传统”方法的示例。 我想将其更改为使用Enum版本,但我不确定如何。 public class WirelessSensorFactory implements ISensorFactory{ private static WirelessSensorFactory wirelessSensorFactory; //Private Const private WirelessSensorFactory(){ System.out.println(“WIRELESS SENSOR FACTORY”); } public static WirelessSensorFactory getWirelessFactory(){ if(wirelessSensorFactory==null){ wirelessSensorFactory= new WirelessSensorFactory(); } return wirelessSensorFactory; } }