相关疑难解决方法(0)

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

所以,我正在研究这个有一些静态常量的类:

public abstract class Foo {
    ...
    public static final int BAR;
    public static final int BAZ;
    public static final int BAM;
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后,我想要一种基于常量获取相关字符串的方法:

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";
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我编译时,我constant expression required在每个3个案例标签上都会出错.

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

java compile-time-constant

159
推荐指数
7
解决办法
19万
查看次数

什么时候使用空白的最终变量?

我正在查看关于最终变量的另一个问题,并注意到你可以声明最终变量而不初始化它们(一个空白的最终变量).有没有理由这样做,什么时候有利?

java final

11
推荐指数
2
解决办法
1万
查看次数

在开关情况下不接受最终常数

我想知道方法add()中的2个声明之间的区别,如下所示.

final int c;
c = 20;
Run Code Online (Sandbox Code Playgroud)

final int c = 20;
Run Code Online (Sandbox Code Playgroud)

我认为两者都是最终变量,我无法重新分配任何新值.以下是以不同方式处理上述声明的方法.

void add() {
        final int a = 30;
        final int b = 10;
        final int c;
        c = 20;

        switch (a) {
        case b + c:
            System.out.println("In case b+c");
            break;

        default:
            break;
        }

    }
Run Code Online (Sandbox Code Playgroud)

抱怨,上面的方法根本没有编译

常数表达式需要案例b + c

如果声明变量c并在一行中初始化,例如final int c = 30;.有用.

java final switch-statement java-7

3
推荐指数
1
解决办法
695
查看次数