首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java switch语句:需要常量表达式,但它是常量

Java switch语句:需要常量表达式,但它是常量
EN

Stack Overflow用户
提问于 2010-09-30 11:02:44
回答 9查看 259.7K关注 0票数 200

所以,我正在处理这个类,它有几个静态常量:

代码语言:javascript
复制
public abstract class Foo {
    ...
    public static final int BAR;
    public static final int BAZ;
    public static final int BAM;
    ...
}

然后,我想要一种根据常量获得相关字符串的方法:

代码语言:javascript
复制
public static String lookup(int constant) {
    switch (constant) {
        case Foo.BAR: return "bar";
        case Foo.BAZ: return "baz";
        case Foo.BAM: return "bam";
        default: return "unknown";
    }
}

但是,当我编译时,我在3个case标签上都得到了一个constant expression required错误。

我知道编译器需要在编译时知道表达式才能编译开关,但是为什么Foo.BA_不是常量?

EN

回答 9

Stack Overflow用户

发布于 2015-02-26 05:16:47

我在Android上得到了这个错误,我的解决方案是使用:

代码语言:javascript
复制
public static final int TAKE_PICTURE = 1;

而不是

代码语言:javascript
复制
public static int TAKE_PICTURE = 1;
票数 53
EN

Stack Overflow用户

发布于 2010-09-30 11:13:49

因为这些不是编译时间常量。考虑以下有效代码:

代码语言:javascript
复制
public static final int BAR = new Random().nextInt();

只有在运行时才能知道BAR的值。

票数 36
EN

Stack Overflow用户

发布于 2011-07-21 22:27:19

您可以使用如下示例中的枚举:

代码语言:javascript
复制
public class MainClass {
enum Choice { Choice1, Choice2, Choice3 }
public static void main(String[] args) {
Choice ch = Choice.Choice1;

switch(ch) {
  case Choice1:
    System.out.println("Choice1 selected");
    break;
 case Choice2:
   System.out.println("Choice2 selected");
   break;
 case Choice3:
   System.out.println("Choice3 selected");
   break;
    }
  }
}

来源:Switch statement with enum

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3827393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档