JAVA 枚举 技术教程文章

深入理解Java枚举类型(enum)

推荐博主文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解Java并发之synchronized实现原理 深入理解Java内存模型(JMM)及volatile关键字 深入理解Java类加载器(ClassLoader)

java入参校验——枚举类型【代码】【图】

一般来讲,对一些post请求,我们可以使用@valid+javax.validation.constraints包下注解的方式,优雅把参数验证放在control层的requst中,举例说明如下图: 但是此时,如果我们知道可以修改的状态只能为枚举类中存在的值,并没有已有的注解可以用,我们可以采用以下代码来实现此功能: 首先我们自己实现一个验证注解,具体代码如下@Target({ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE}) @Reten...

Java-子类型枚举或子类【代码】

我试图让一个枚举对应于一个类或返回该类,但我得到解决.如果我使用CommandType.SELLSHARES来返回SellShares.class,是否可能出现这种情况?还是可以组织具有从父类型继承的不同类别的枚举? 命令-ADMIN,USER,CLIENTpublic enum CommandType {// SELLSHARES, BUYSHARES, UPDATEUSER, ADDUSER, ADMINASSIGNMENT, BANUSER, CHANGESTATUS, REMOVEUSERSELLSHARES (SellShares.class),BUYSHARES (BuyShares.class);private Class<Command>...

java – 无法访问枚举初始化程序中的静态字段【代码】

在这段代码中我得到一个编译器错误,请参阅注释:public enum Type {CHANGESET("changeset"),NEW_TICKET("newticket"),TICKET_CHANGED("editedticket"),CLOSED_TICKET("closedticket");private static final Map<String, Type> tracNameMap = new HashMap<String, Type>();private Type(String name) {tracNameMap.put(name, this); // cannot refer to static field within an initializer}public static Type getByTracName(Strin...

使用枚举的策略模式.在Java中需要一个简单的例子【代码】

参见英文答案 > Where is the benefit in using the Strategy Pattern? 8个我正在尝试理解java中的策略模式和枚举.我用谷歌搜索了这篇文章并找到了一些关于这个主题的文章,但是大多数文章看起来都太复杂了.任何人都可以提供一个简单的示例或其他链接,使用java在外行术语中使用枚举来演示策略模式吗? 提前谢谢你.解决方法:这应该做:interface Strategy {int execute(int a, int b); }enum Mat...

如何在java中打印所有枚举值?【代码】

enum generalInformation {NAME {@Overridepublic String toString() {return "Name";}},EDUCATION {@Overridepublic String toString() {return "Education";}},EMAIL {@Overridepublic String toString() {return "Email";}},PROFESSION {@Overridepublic String toString() {return "Profession";}},PHONE {@Overridepublic String toString() {return "Phone";}} }我有这些信息可用于枚举. >如何打印所有枚举值,如:print.gene...

从枚举中填充JavaFX ComboBox或ChoiceBox【代码】

有没有办法用枚举的所有枚举填充JavaFX ComboBox或ChoiceBox? 这是我尝试过的:public class Test {public enum Status {ENABLED("enabled"),DISABLED("disabled"),UNDEFINED("undefined");private String label;Status(String label) {this.label = label;}public String toString() {return label;}} }在另一个类中,我正在尝试填充ComboBox:ComboBox<Test.Status> cbxStatus = new ComboBox<>();cbxStatus.setItems(Test.Statu...

Java类卡枚举示例.修订【代码】

*任何帮助深表感谢 * 我正在使用java网站上的类卡示例来尝试构建游戏. http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html 我想分配套装和等级值.我不知道该怎么做.. 对于套装,我想做的是分配Heart = 4diamond = 3,club = 2,spade = 1 排名,ace = 11杰克,女王,国王= 102-10卡的价值.. 程序接受用户输入作为手数和每手牌数的参数.像这样:$java Deal 4 5 所以我想要它打印八个黑桃(8),十个心(40) 基于值…示例spade = ...

java – 如何通过其属性获取枚举类型?【代码】

我写了一个枚举类,我想要按类型获取属性并获取type by属性,但似乎不可能.public enum AreaCode {area1(7927),area2(7928),area3(7929);private final int ac;AreaCode(int ac) {this.ac = ac;}int areaCode(){return ac;}AreaCode area(int n) {switch (n) {case 7927: return AreaCode.area1;case 7928: return AreaCode.area2;case 7929: return AreaCode.area3;}} }上面的代码不会编译.如何使area(int n)工作?解决方法:您需要做...

java 枚举(enum) 全面解读【图】

原文链接:https://www.jianshu.com/p/0d69c36a723b简介 枚举是Java1.5引入的新特性,通过关键字enum来定义枚举类。枚举类是一种特殊类,它和普通类一样可以使用构造器、定义成员变量和方法,也能实现一个或多个接口,但枚举类不能继承其他类. 原理分析 枚举类型使用的最常用类型就是枚举常量.下面通过一个简单的Demo来说明枚举的原理.// 定义 public enum Color {BLACK, WHITE }// 使用 public class Main {public static void mai...

枚举是最好的Java单例实现方法【图】

Java单例的三种经典实现 双重检查锁(DCL)volatile关键字在此处起了什么作用? 为何要执行两次instance == null判断? 静态内部类这种方式是通过什么机制保证线程安全性与延迟加载的?(注意,这是Java单例的两大要点,必须保证) 枚举Java枚举的本质是? 这种方式又是通过什么机制保证线程安全性与延迟加载的? 枚举单例可以有效防御两种破坏单例(即使单例产生多个实例)的行为:反射攻击与序列化攻击。言外之意就是前两种单例方...

java – 为什么使用枚举而不是常量?哪个在软件设计和可读性方面更好【代码】

我有一个场景,我有播放器类型ARCHER,WARRIOR和巫师.我应该在Player类中为玩家类型使用什么?常量最终静态字符串变量或枚举?为什么?请帮助理由.解决方法:假设你使用常量字符串(或int值 – 它们也是如此):// Constants for player types public static final String ARCHER = "Archer"; public static final String WARRIOR = "Warrior";// Constants for genders public static final String MALE = "Male"; public static final...

如何从Java中的字符串值获取枚举值?【代码】

说我有一个只是的枚举public enum Blah {A, B, C, D }我想找到一个字符串的枚举值,例如“A”,它将是Blah.A.怎么可能这样做? Enum.valueOf()是我需要的方法吗?如果是这样,我将如何使用它?解决方法:是的,Blah.valueOf(“A”)会给你Blah.A. 请注意,名称必须是完全匹配,包括大小写:Blah.valueOf(“a”)和Blah.valueOf(“A”)都抛出IllegalArgumentException. 静态方法valueOf()和values()是在编译时创建的,不会出现在源代码中.但它...

java – 是否可以在快速枚举中进行转换?【代码】

假设你开始// Set<String> Object arrayOfSomething[] = someObject.toArray();现在,我知道arrayOfSomething实际上是一个arrayOfStrings,我想迭代一遍 目前,我for (Object o : arrayOfSomething) {String strValue = ((String) o).trim();...以下是可能的:for (String (String) strValue : arrayOfSomething) {...是否可以将对象转换为快速枚举的一部分?解决方法:还有一个方法Collection.toArray(T [])返回一个T类型的数组而不是...

使用values()创建枚举常量的最终Java类数组【代码】

在Java枚举类中,我想创建一个包含类的values()的最终静态数组.当我沿着以下行执行此操作时,结果数组为null.public enum Name {E1( stuff ), E2( stuff );private static final Name[] values = Name.values();private Name( stuff ) { more stuff; } }我也试过通过调用一个显式的类setter方法来做到这一点,但是这给了一个java.lang.ExceptionInInitializerError异常. 我理解这个问题是由一些浅的依赖引起的,因为前面代码中的东西使...

java – 枚举,类,反射和通用铸造【代码】

考虑一下我有一个接口com.mycompany.SomeInterface,一个枚举com.mycompany.SomeEnum实现了SomeInterface.我希望在运行时使用Reflection API获取此类的所有枚举常量 – 作为SomeInterface的实例. 目前,我的代码(在类EnumConstantGetter中)是这样的:Class<?> clazz = EnumConstantGetter.class.getClassLoader().loadClass("com.mycompany.SomeEnum");if (!(SomeInterface.class.isAssignableFrom(clazz)) {throw new Exception("th...

java – 修复代码:查找对枚举的序数方法的所有调用

我有一些写得不好的代码,显然违反了Effective Java 31. 我试图通过添加一个带有getter的实例字段来修复它,但是我很难在enum上找到对.ordinal()方法的所有引用.在.ordinal()上执行Eclipse调用层次结构,可以在任何枚举上获得对该方法的所有引用.在这个代码库中有数百个这种不良做法的例子,我无法解决所有这些问题.我只是想为这个枚举修复它. 有没有办法在Eclipse或其他工具中找到对MyEnum.ordinal()的所有引用?解决方法:我首先使用C...

可以从Java中该类的枚举中获取类方法吗?【代码】

假设我有一个包含Java中枚举的类.是否可以从包含枚举的类中访问方法?举个例子:public class Foo {private string getClassVal() { return "42"; } public string getOtherClassVal() { return "TheAnswer"; } public enum Things {ONE("One"), TWO("Two"), THREE("Three"); private String _val; private Things(String val) { _val = val; } // This method is the problempublic String getSomeVal() {return _val + this.getC...

java – 在枚举上调用方法【代码】

public enum AgeGroup {CHILD{public int get(){return 10;} }, TEEN, YOUNG, MID, OLD;}我有一个枚举AgeGroup,你看到CHILD有一个方法get().有人可以告诉我为什么我们不能从CHILD调用get()这背后的设计方法是什么,或者为什么这样设计?解决方法:首先,枚举的所有实例都是相同的类型,这意味着所有实例都具有相同的方法集. 您需要在枚举类型本身上声明一个方法,以便实例具有一个方法:public enum AgeGroup {CHILD{public int get(){r...

java – 枚举 – 静态初始化顺序【代码】

参见英文答案 > Why can’t enum’s constructor access static fields? 5个在java中禁止在枚举类的构造函数中访问静态变量.为什么在枚举中不会交换静态初始化的顺序? 正确代码示例:enum Test {TEST1, TEST2;static int x; }为什么java的开发人员没有创建正确的代码:enum Test {static int x;TEST1, TEST2; }然后可以在构造函数中使用静态变量.现在禁止了. 它有什么理由还是只是他们的设计?...