Java 使用带有 switch 语句的枚举 [英] Java using enum with switch statement

查看:24
本文介绍了Java 使用带有 switch 语句的枚举的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I've looked at various Q&As on SO similar to this question but haven't found a solution.

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

What I have is an enum which represents different ways to view a TV Guide...

在 NDroid Application 类中

In the NDroid Application class

static enum guideView {
    GUIDE_VIEW_SEVEN_DAY,
    GUIDE_VIEW_NOW_SHOWING,
    GUIDE_VIEW_ALL_TIMESLOTS
}

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

...when the user changes the view an event handler receives an int from 0-2 and I'd like to do something like this...

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

In an Android Activity onClick(DialogInterface dialog, int which) event handler

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

我已经习惯了 C# 枚举和 select/case 语句,它们允许像上面这样的事情,我知道 Java 做的事情不同,但我就是无法理解我需要做什么.

I'm used to C# enums and select/case statements which would allow something like the above and I know Java does things differently but I just can't make sense of what I need to do.

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

Am I going to have to resort to if statements? There will likely only ever be 3 choices so I could do it but I wondered how it could be done with switch-case in Java.

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

EDIT Sorry I didn't completely expand on the issue as I was looking at it as being a generic Java issue. I've added to the question to explain a bit further.

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

There isn't anything that's Android specific which is why I didn't tag it as Android but the enum is defined in the Application class and the code where I wan't the switch is in an Activity. The enum is static as I need to access it from multiple Activities.

推荐答案

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

The part you're missing is converting from the integer to the type-safe enum. Java will not do it automatically. There's a couple of ways you can go about this:

  1. 使用静态最终 int 列表而不是类型安全的枚举并打开您收到的 int 值(这是 Java 5 之前的方法)
  2. 打开指定的 id 值(如 heneryville 所述) 或枚举值的序数值;即 guideView.GUIDE_VIEW_SEVEN_DAY.ordinal()
  3. 判断int值代表的枚举值,然后开启枚举值.

  1. Use a list of static final ints rather than a type-safe enum and switch on the int value you receive (this is the pre-Java 5 approach)
  2. Switch on either a specified id value (as described by heneryville) or the ordinal value of the enum values; i.e. guideView.GUIDE_VIEW_SEVEN_DAY.ordinal()
  3. Determine the enum value represented by the int value and then switch on the enum value.

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 实现更有用/更不容易出错,该实现将整数值作为参数来解析适当的枚举值并让您集中检查边界.

You may find it more helpful / less error prone to write a custom valueOf implementation that takes your integer values as an argument to resolve the appropriate enum value and lets you centralize your bounds checking.

这篇关于Java 使用带有 switch 语句的枚举的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆