Java 使用带有 switch 语句的枚举

标签 java enums switch-statement

我查看了与此问题类似的 SO 上的各种问答,但没有找到解决方案。

我所拥有的是一个枚举,它代表查看电视指南的不同方式...

在 NDroid Application 类中

static enum guideView {
    GUIDE_VIEW_SEVEN_DAY,
    GUIDE_VIEW_NOW_SHOWING,
    GUIDE_VIEW_ALL_TIMESLOTS
}

...当用户更改 View 时,事件处理程序从 0-2 接收 int,我想做这样的事情...

在 Android Activity onClick(DialogInterface dialog, int which) 事件处理程序

// 'which' is an int from 0-2
switch (which) {
    case NDroid.guideView.GUIDE_VIEW_SEVEN_DAY:
    ...
    break;
}

我已经习惯了 C# 枚举和 select/case 语句,它们允许执行上述操作,并且我知道 Java 做的事情不同,但我无法理解我需要做什么。

我将不得不求助于 if 语句吗?可能只有 3 个选择,所以我可以做到,但我想知道如何使用 Java 中的 switch-case 来完成。

编辑 抱歉,我没有完全扩展该问题,因为我将其视为通用 Java 问题。我已经添加到问题中以进一步解释。

没有任何特定于 Android 的东西,这就是为什么我没有将其标记为 Android,但枚举是在 Application 类中定义的,而我不想切换的代码位于 Activity 。枚举是静态的,因为我需要从多个 Activity 中访问它。

最佳答案

您缺少的部分是将整数转换为类型安全的枚举。 Java 不会自动执行此操作。有几种方法可以解决这个问题:

  1. 使用静态最终 int 列表而不是类型安全的枚举并打开您收到的 int 值(这是 Java 5 之前的方法)
  2. 打开指定的 id 值(如 described by heneryville)或枚举值的序数值;即 guideView.GUIDE_VIEW_SEVEN_DAY.ordinal()
  3. 判断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;
        }
    }
    

    您可能会发现编写自定义 valueOf 实现更有用/更不容易出错,该实现将整数值作为参数来解析适当的枚举值并让您集中检查边界。

关于Java 使用带有 switch 语句的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8108980/

相关文章:

java - SAX 解析器字符方法不收集所有内容

java - 将 Double 值格式化为 2 个小数位的最佳方法

Java 枚举和 Objective-C 枚举

Swift:针对开关案例中的可选值进行测试

swift - 二元运算符 '~=' 不能应用于类型 'String' 和 'String?' 的操作数

javascript - 根据第一个真实条件评估表达式

c++ - 在 switch 语句中共享一个 case。表达问题。它是如何工作的?

java - Criteria API 如何编写 = ANY(?1) 表达式?

java - conf/web.xml 中的 Apache tomcat <error-page> 标记未呈现错误页面

java - 检查字符串是否包含在枚举集中,时间复杂度为 O(1)