我对C#非常熟悉,但开始在Java中工作更多.我希望得知Java中的枚举基本上与C#中的枚举相同,但显然情况并非如此.最初,我很高兴得知Java枚举可能包含多个数据,这似乎非常有利(http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html).但是,从那时起我发现C#中缺少许多功能,例如能够轻松地为枚举元素分配特定值,以及因此无需花费大量精力就能将整数转换为枚举(即整数值转换为相匹配的Java枚举).
所以我的问题是:对于带有一堆公共静态最终字段的类,Java枚举是否有任何好处?或者它只提供更紧凑的语法?
编辑:让我更清楚.Java枚举对于具有相同类型的一组公共静态最终字段的类有什么好处?例如,在第一个链接的行星示例中,枚举对具有这些公共常量的类有什么好处:
public static final Planet MERCURY = new Planet(3.303e+23, 2.4397e6);
public static final Planet VENUS = new Planet(4.869e+24, 6.0518e6);
public static final Planet EARTH = new Planet(5.976e+24, 6.37814e6);
public static final Planet MARS = new Planet(6.421e+23, 3.3972e6);
public static final Planet JUPITER = new Planet(1.9e+27, 7.1492e7);
public static final Planet SATURN = new Planet(5.688e+26, 6.0268e7);
public static final Planet URANUS = new Planet(8.686e+25, 2.5559e7);
public static final Planet NEPTUNE = …Run Code Online (Sandbox Code Playgroud) 我已经在SO上查看了类似于这个问题的各种问答,但还没有找到解决方案.
我所拥有的是一个枚举,它代表了观看电视指南的不同方式......
在NDroid Application类中
static enum guideView {
GUIDE_VIEW_SEVEN_DAY,
GUIDE_VIEW_NOW_SHOWING,
GUIDE_VIEW_ALL_TIMESLOTS
}
Run Code Online (Sandbox Code Playgroud)
...当用户更改视图时,事件处理程序int从0-2 接收,我想做这样的事情......
在Android Activity onClick(DialogInterface dialog, int which)事件处理程序中
// 'which' is an int from 0-2
switch (which) {
case NDroid.guideView.GUIDE_VIEW_SEVEN_DAY:
...
break;
}
Run Code Online (Sandbox Code Playgroud)
我已经习惯了C#enums和select/case语句,这些语句允许类似上面的内容,我知道Java做的事情有所不同,但我无法理解我需要做什么.
我不得不诉诸if陈述吗?可能只有3个选择,所以我可以做到但我想知道如何用Java中的switch-case完成它.
编辑对不起我没有完全扩展这个问题,因为我认为它是一个通用的Java问题.我已经添加了这个问题来进一步解释.
没有任何Android特定的东西,这就是为什么我没有将它标记为Android,但枚举是在Application类和我不想切换的代码中定义的Activity.枚举是静态的,因为我需要从多个活动中访问它.
为什么enum的构造函数不能访问静态字段和方法?这对于类非常有效,但不允许使用枚举.
我要做的是将我的枚举实例存储在静态Map中.考虑这个允许通过abbreivation查找的示例代码:
public enum Day {
Sunday("Sun"), Monday("Mon"), Tuesday("Tue"), Wednesday("Wed"), Thursday("Thu"), Friday("Fri"), Saturday("Sat");
private final String abbreviation;
private static final Map<String, Day> ABBREV_MAP = new HashMap<String, Day>();
private Day(String abbreviation) {
this.abbreviation = abbreviation;
ABBREV_MAP.put(abbreviation, this); // Not valid
}
public String getAbbreviation() {
return abbreviation;
}
public static Day getByAbbreviation(String abbreviation) {
return ABBREV_MAP.get(abbreviation);
}
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为枚举不允许在其构造函数中使用静态引用.然而,如果实现为类,它只能找到:
public static final Day SUNDAY = new Day("Sunday", "Sun");
private Day(String name, String abbreviation) {
this.name = name;
this.abbreviation = abbreviation;
ABBREV_MAP.put(abbreviation, …Run Code Online (Sandbox Code Playgroud) 通过套接字发送枚举值的最佳方法是什么?有没有办法将枚举值转换为int,反之亦然?喜欢:
Enum values {
value1,
value2
}
int value = (int)value1;
And...
values value2 = (value) value;
Run Code Online (Sandbox Code Playgroud)
通过互联网发送这个会很高兴!谢谢大家!
巴斯