JAVA 枚举 技术教程文章

.Net(C#)枚举重写为Java【代码】

我在.Net中有一个枚举.如何用Java重写此Enum? 这是枚举:public enum AdCategoryType : short {ForSale = 1,ForBuy = 2,ForRent = 8,WantingForRent = 16,WorkIsWanted = 32, WorkIsGiven = 64 }解决方法:这使您得到枚举:public enum AdCategoryType {ForSale(1),ForBuy(2),ForRent(4),WantingForRent(8),WorkIsWanted(16),WorkIsGiven(32);private final int value;AdCategoryType(int value) {this.value = value;}public int ...

Java枚举类【代码】

我正在实现枚举类,该类将用于检索应用程序中的某些背景,该类的当前实现在这里:public enum Painters{/*** Available painters.*/Background(getBackgroundPainter()),InactiveBackground(getInactiveBackgroundPainter()),DesktopBackground(getBackgroundPainter());/*** The background painter.*/private Painter<Component> _painter;/*** Constructor will initialize the object.*/Painters(Painter<Component> painter){_p...

java-枚举类型中的方法可以更改枚举实例的状态吗?

如果Enums是摆脱编译时间常数的答案,那么语言设计者为什么要提供让任意方法和字段以及在Enums上实现任意接口的工具?这些方法永远无法更改Enum实例的状态,或者可以吗?如果允许它们更改状态,则Enum类型的不变式(即一些输出一些常量的类型)将破坏恕我直言.解决方法:Java枚举实际上只是经过编译器和运行时特殊处理的类.因此,是的,对枚举实例的方法调用当然可以更改其状态.我不确定您的意思是“那么Enum类型的不变性,即输出一些常量的...

java-枚举静态数组和注释值的混淆【代码】

我有枚举:public enum Scope {USER, GLOBAL;public static final Scope[] TRANSIENT = {};public static final Scope[] USER_OVER_GLOBAL = {GLOBAL, USER};public static final Scope[] GLOBAL_OVER_USER = {USER, GLOBAL}; }和注释:public @interface Config {public Scope[] load() default Scope.GLOBAL_OVER_USER; // Can't use this defvalpublic Scope[] save() default Scope.USER; }为什么我不能使用静态数组作为注释属...

java-在Spring Bean中定义枚举映射【代码】

我试图在我的Spring beans xml中定义一个枚举映射,但是我希望它在xml中填充,但是当我尝试像这样定义它时<bean class = "java.util.EnumMap"><constructor-arg><util:map key-type="org.itemlist.products.stockitem"><entry key="stockitem.SOAP">100</entry></util:map> </constructor-arg>更新 这是我的bean配置<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="h...

java-枚举类型引用或基元(带有示例)-浅/深复制【代码】

我的问题很基本,但是我想100%理解所有内容. SO中的许多问题都与我的帖子有关,但我找不到令人满意的答案. 我们知道Java中的Enums是引用类型.让我们考虑以下代码段:public static class A {public int i;public A(int i) {this.i = i;} }public static class Test {int i;A a;public Test(int i, A a){this.i = i;this.a = a;}public Test(Test oldTest){this.i = oldTest.i;this.a = oldTest.a;} }public static void main(String...

java-如何实现将返回枚举的具体类型的方法签名?【代码】

我想创建一个将从枚举返回四种类型之一的方法.因此,如果有人想要SCAN_RANK_GROUPS的过滤器,我如何才能将方法的返回类型设为Rank,或者如果有人想要SCAN_MEMBERS,它将返回Member.我该怎么做呢?public <T> T scanTemporaryStorage(ScanFilters filter) {return (T) filter.performOperation(); }public enum ScanFilters {SCAN_RANK_GROUPS {@Overridepublic <Rank> Rank performOperation() {}},SCAN_MEMBERS {@Overridepublic <Mem...

java-为什么在打印输出时必须将枚举元素转换为String?【代码】

Enumeration paramNames = request.getParameterNames(); while(paramNames.hasMoreElements()) {String paramName = (String) paramNames.nextElement();out.print(paramName); }从上面的代码中,我不明白为什么有必要将paramNames.nextElement()转换为String.有人可以解释一下吗?当我从表单传递参数名称时,它已经在字符串中了,那为什么要使用(String)?解决方法:枚举是一种通用类型,通常应与适当的通用参数一起使用.例如,字符串枚...

覆盖Java枚举中的通用方法【代码】

为了为通用公共方法的枚举的每个实例提供特定的行为,我们可以执行以下操作:public enum Action { a{void doAction(...){// some code}}, b{void doAction(...){// some code}}, c{void doAction(...){// some code}};abstract void doAction (...); }有没有办法为枚举中定义的抽象泛型方法提供特定的实现? 例如.:abstract<T> T doAction (T t);我在其他问题中读到它不可能实现,但我一直在努力寻求解决方法,并提出了过于复杂的装...

如何在Java中找到枚举的子集?【代码】

我有一个如下所示的枚举:public enum DatacenterEnum {ABC, PQR, LTR;// this tells my current local datacenter enumprivate static final DatacenterEnum ourLocation = findCurrentLocation();}现在,我想查找远程数据中心的列表.例如,假设我们的位置是ABC,则REMOTE_DATACENTER列表或它可以是EnumSet(稍后将对此进行迭代)应具有PQR和LTR,这与其他组合类似.做这个的最好方式是什么?解决方法:听起来好像您想要补充.// contains ...

java-枚举的Spring数据方法名称【代码】

有什么办法可以将枚举值放在Spring Data的方法名称中?可以使用@Query注释完成,如下所示:@Query("select t from Ticket as t where t.status != desk.enums.TicketStatus.CLOSED")List<Ticket> findActiveTickets();status是枚举.但是,仅使用方法名称怎么办呢?使用类似List< Ticket> findByStatusIsNotClosed();会导致找不到TicketStatus类型的isNotClosed属性. 那么,不使用@Query怎么办呢?解决方法:如果您使用的是Java 8,则可以...

java-将枚举值列表作为HTTP查询参数传递【代码】

我想将枚举值列表作为HTTP查询参数传递.服务器端的入口点如下所示:@GET @Path("/getMyResult") public MyResultType getMyResult(@QueryParam("me") final List<MyEnum> myEnums) 无法修改.考虑MyEnum包含值MyValue1,MyValue2,MyValue3和MyValue4. (MyResultType与该问题无关.)仅传递一个值,如下所示,效果很好(这对我来说有点奇怪):http://localhost/getMyResult?me=MyValue1但是,以这种方式传递元素列表:http://localhost/getM...

java – 如何在枚举中读取Spring Messagesource中的内容?【代码】

我有一个包含三种不同状态类型的枚举.这些状态应显示在发送给用户的电子邮件中,包含要显示的状态的字符串存储在messages.properties中(使用Spring类org.springframework.context.MessageSource的实现读取).这在普通的Spring控制器中运行良好.但是,我更愿意在Enum中获得“显示状态”(在一个地方包含逻辑). 但是,将消息源自动连接到枚举,如下面的代码似乎不起作用,因为messageSource属性始终为空.public enum InitechStatus{OPEN("op...

java-枚举的大小

如何获得Enumeration< String>的大小?没有迭代呢? 在调试时,我可以看到枚举的大小,但是找不到找到该值的方法.解决方法:Enumeration接口没有公开其大小,并且某些(很多?)实现确实不具备此知识.在不了解具体实现的情况下,您别无选择,只能对其进行迭代.

java-在FSM中使用枚举比仅使用字符串有好处吗?【代码】

我想创建一个有限状态机,我可以找到的大多数示例代码都使用了枚举,而我只是想知道它是否比仅使用字符串或整数存储状态更具优势. 使用枚举: class TrafficLight { 枚举状态{ 红,黄,绿 };State state = State.GREEN;public void iterate() throws InterruptedException {switch (this.state) {case RED:System.out.println("RED");Thread.sleep(1000);this.state = State.GREEN;break;case GREEN:System.out.println("...

将Java枚举映射为整数【代码】

这个问题已经在这里有了答案: > Cast Int to enum in Java 17个我想将整数映射到Java中的枚举.整数必须是键,而枚举是值.我见过的所有示例都将枚举作为值,将整数作为键.我有:enum CardStatus {UNKNOWN, // 0 should map to thisPENDING, // 1 should map to thisACTIVE // 2 should map to thispublic CardStatus getCardStatus(int cardStatus) {// e.g. cardStatus o...

Java枚举构造函数中允许使用varargs吗?【代码】

enum MyEnum {A( 1, 2, 3, 4),B(1, 2),C(4, 5, 8, 8, 9);private MyEnum( int firstInt, int... otherInts ) {// do something with arguments, perhaps initialize a List} }这有什么问题吗?有什么理由不这样做?解决方法:当然,这是完全合法的.如果您的程序需要,则没有理由不这样做.

java-扩展枚举【代码】

public enum myEnum { VAL1(10), VAL2(20), VAL3("hai") {public Object getValue() {return this.strVal;}public String showMsg() {return "This is your msg!";}};String strVal;Integer intVal;public Object getValue() {return this.intVal;}private myEnum(int i) {this.intVal = new Integer(i);}private myEnum(String str) {this.strVal = str;} }在上面的枚举中,当我为VAL3添加恒定的特定类主体时会发生什么?VAL3的...

java-EL枚举字符串处理【代码】

我有一个变量从映射到枚举的spring控制器传递到我的JSP视图.它正在“ ENUM_VALUE”上打印出来,不是很用户友好. 将其转换为更具可读性的形式(例如“枚举值”)的最佳方法是什么. 我宁愿使用纯EL解决方案,以免在控制器中编写更多代码来解析此问题,但是所有注释均值得赞赏.解决方法:该值来自Enum#name()方法.只需在您的枚举中添加一个吸气剂即可返回友好名称.例如.public String getFriendlyName() {return name().toLowerCase().repla...

[Java核心技术]五-继承(枚举类)【代码】

Java枚举类型(enum)枚举类型都是继承了Enum类(是一个抽象类)的一个类,我们可以向enum类中添加方法和变量等。编译再反编译可以看到枚举类型对应的类的内容。 每个枚举常量都对应一个Enum类的实例。 例子public enum Day2 {MONDAY("星期一"),TUESDAY("星期二"),WEDNESDAY("星期三"),THURSDAY("星期四"),FRIDAY("星期五"),SATURDAY("星期六"),SUNDAY("星期日");//逗号分隔,分号结束private String desc;/*** 私有构造,防止被外部调...