当前位置: 首页 > 面试题库 >

Java将enum与switch语句一起使用

孔欣可
2023-03-14
问题内容

我已经看过类似于此问题的各种问答,但是还没有找到解决方案

我所拥有的一个枚举代表了观看电视指南的不同方式…

在NDroid Application类中

static enum guideView {
    GUIDE_VIEW_SEVEN_DAY,
    GUIDE_VIEW_NOW_SHOWING,
    GUIDE_VIEW_ALL_TIMESLOTS
}

…当用户更改视图时,事件处理程序会收到int0-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;
}

我已经习惯了C#枚举和select / case语句,这些语句允许类似上面的内容,而且我知道Java的处理方式有所不同,但是我根本无法理解需要做什么。

我将不得不诉诸if陈述吗?我可能只有3个选择,所以我可以做到,但是我想知道如何在Java中使用switch-case来实现。

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

没有什么是特定于Android的,这就是为什么我没有将其标记为Android,而是在Application类中定义了枚举,而我不希望在其中进行切换的代码则在Activity。枚举是静态的,因为我需要从多个活动中访问它。


问题答案:

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

  1. 使用静态最终整数列表而不是类型安全的枚举,然后打开接收到的整数值(这是Java 5之前的方法)
  2. 开启指定的id值(如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实现(以整数值作为参数来解析适当的枚举值并允许您集中边界检查)的自定义实现更有用/更少出错。



 类似资料:
  • 我想使用带有LIKE关键字的java准备语句。我正在尝试匹配日期字符串。这是我的密码。 它给出了以下例外。 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,了解在“?”附近使用的正确语法?和s.date一样?订单截止日期DESC LIMIT 1'第1行

  • 主要内容:switch 语句格式,嵌套 switch 语句,if 语句和 switch 语句的区别if…else 语句可以用来描述一个“二岔路口”,我们只能选择其中一条路来继续走,然而生活中经常会碰到“多岔路口”的情况。 switch 语句提供了 if 语句的一个变通形式,可以从多个语句块中选择其中的一个执行。 switch 语句格式 switch 语句是 Java 的多路分支语句。它提供了一种基于一个表达式的值来使程序执行不同部分的简单方法。因此,它提供了一个比一系列 if-else-if

  • 问题内容: 我正在使用JDBC模板,并希望使用准备好的语句从数据库中读取数据。我遍历.csv文件中的许多行,并且在每一行上执行一些具有相应值的SQL选择查询。 我想加快从数据库中的读取速度,但是我不知道如何使JDBC模板与准备好的语句一起使用。 有PreparedStatementCreator和PreparedStatementSetter。如本例所示,它们都是使用匿名内部类创建的。但是在Pre

  • 本文向大家介绍Java中的Switch语句,包括了Java中的Switch语句的使用技巧和注意事项,需要的朋友参考一下 switch语句允许针对值列表对变量进行相等性测试。每个值称为一个案例,并针对每种情况检查要打开的变量。首先让我们看一下语法- 以下是适用于Java中switch语句的规则- switch语句中使用的变量只能是整数,可转换整数(字节,短整数,字符),字符串和枚举。 开关内可以有任

  • switch 语句可以替代多个 if 判断。 switch 语句为多分支选择的情况提供了一个更具描述性的方式。 语法 switch 语句有至少一个 case 代码块和一个可选的 default 代码块。 就像这样: switch(x) { case 'value1': // if (x === 'value1') ... [break] case 'value2':

  •  使用 switch 语句可以更简洁地实现 if ~ else if 的结构。格式如下。 switch(base_expression) { casecondition_expression1: casecondition_expression2: : : default: : : }  写在 base_expression 位置的表达式会在刚开始时被求值。switch 后面的语句块中的 case