Squ*_*onk 103 java enums switch-statement
我已经在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.枚举是静态的,因为我需要从多个活动中访问它.
Oph*_*ian 156
您缺少的部分是从整数转换为类型安全的枚举.Java不会自动执行此操作.您可以通过以下几种方式解决此问题:
guideView.GUIDE_VIEW_SEVEN_DAY.ordinal()确定int值表示的枚举值,然后打开枚举值.
enum GuideView {
SEVEN_DAY,
NOW_SHOWING,
ALL_TIMESLOTS
}
// Working on the assumption that your int value is
// the ordinal value of the items in your enum
public void onClick(DialogInterface dialog, int which) {
// do your own bounds checking
GuideView whichView = GuideView.values()[which];
switch (whichView) {
case SEVEN_DAY:
...
break;
case NOW_SHOWING:
...
break;
}
}
Run Code Online (Sandbox Code Playgroud)
您可能会发现编写一个自定义valueOf实现更有帮助/更不容易出错,该实现将整数值作为参数来解析相应的枚举值,并允许您集中边界检查.
Dha*_*hka 39
如果whichView是GuideView枚举的对象,则以下效果很好.请注意,之后的常数没有限定符case.
switch (whichView) {
case SEVEN_DAY:
...
break;
case NOW_SHOWING:
...
break;
}
Run Code Online (Sandbox Code Playgroud)
Piy*_*too 12
枚举不应该像你拥有的那样在案例标签中合格NDroid.guideView.GUIDE_VIEW_SEVEN_DAY,而应该删除资格和使用GUIDE_VIEW_SEVEN_DAY
我喜欢Java枚举的一些用法:
枚举值参数:
enum StateEnum {
UNDEFINED_POLL ( 1 * 1000L, 4 * 1000L),
SUPPORT_POLL ( 1 * 1000L, 5 * 1000L),
FAST_POLL ( 2 * 1000L, 4 * 60 * 1000L),
NO_POLL ( 1 * 1000L, 6 * 1000L);
...
}
Run Code Online (Sandbox Code Playgroud)
开关示例:
private void queuePoll(StateEnum se) {
// debug print se.name() if needed
switch (se) {
case UNDEFINED_POLL:
...
break;
case SUPPORT_POLL:
...
break;
Run Code Online (Sandbox Code Playgroud)