最终变量不足以满足开关情况

时间:2015-03-23 18:45:13

标签: java switch-statement

我有以下代码:

public class Main {

    static final String fu = Week.class.getName();

    public static void main(String[] arg0){

        String h = "dummy";
        switch (h) {
*        case fu:
            System.out.println(8);
            break;
        default:
            break;
        }
    }
}

现在Eclipse抱怨* case expressions must be constant expressions。但是我按照我的要求使fu保持不变!为什么这还不够,我能做什么(除了if-else)?

2 个答案:

答案 0 :(得分:4)

  

为什么这还不够

因为它不是JLS 15.28规则的编译时常量。

  

为什么这还不够,我能做什么(除了if-else)?

基本上没什么 - 除非你使用字符串文字,这显然不是很愉快。

答案 1 :(得分:0)

我遇到的问题似乎是编译器在编译时需要一个值,以便使你的字符串变量为常量
在你的情况下,类名称来自运行时而不是在编译时,因此编译器不会将其视为常量 使变量保持不变
- 仅使用常量表达进行初始化
- 应声明为最终
- 原语或字符串
- 声明时初始化

所以你无效第一个条件。仅供参考,请查看以下程序 -
这里 case x 会给出错误,因为它来自class的@ runtime。但是,如果将它设置为20之类的常量,它将运行良好。

  package com;

    public class Main {

    static final int x = Week.getx();

    public static void main(String[] arg0){

        int i = 10;
        switch (i)
        {
        case x : System.out.println("Hello"); break;

        case 12 : System.out.println("Bye"); break;

        }

            }
}

    包com;

public class Week {

public static int  getx()
{
    return 10;
}
}


告诉您是否需要更多解释!