在Java中,是否可以使用方法/构造函数的参数作为switch语句、case常量?

发布于 2024-10-15 06:36:45 字数 348 浏览 3 评论 0原文

在 switch case 中,我注意到当我尝试使用参数作为 case 常量时,出现编译错误。但我可以使用字段/本地变量。

难道真的不能使用参数作为大小写常量吗?或者是否有例外(如有,请提供示例)?

示例:

final int field = 0;
void method( final int parameter) {
    switch( 3) {
        case field: // ALLOWED
        case parameter; // NOT ALLOWED
    }
}

我尝试直接使用该参数。我对将参数值保存在本地变量中的解决方案不感兴趣。

In a switch case, I've noticed that when I try to use a parameter as a case constant, I get a compilation error. But I can use fields/local vars.

Is it really impossible to use a parameter as a case constant? Or are there exceptions (if so, please provide an example)?

Example:

final int field = 0;
void method( final int parameter) {
    switch( 3) {
        case field: // ALLOWED
        case parameter; // NOT ALLOWED
    }
}

I'm trying to use the parameter directly. I'm not interested in solutions that save the value of the parameter in a local var.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

美人如玉 2024-10-22 06:36:45

与 C 和 C++ 非常相似,Java 只允许编译时常量作为 case 的值。

initialized final 类成员的值可以在编译时确定并且不能更改。 final 方法参数在每次方法调用时可以具有不同的值。

为了与方法参数进行比较,您可能必须依靠古老的 if...else...

编辑:

顺便说一下,请注意上面对初始化的强调。声明处没有初始化程序的 final 类成员也不能用作 case 值。

Much like C and C++, Java only allows compile-time constants as a value for case.

The value of initialised final class members can be determined at compile time and cannot change. final method parameters can have a different value at each method call.

To compare with method parameters, you probably have to fall back on good-old if...else....

EDIT:

By the way, note the emphasis on initialised above. A final class member without an initialiser at the declaration cannot be used in as a case value either.

固执像三岁 2024-10-22 06:36:45

java 只能在 case 部分使用常量

java can use only constants in the case part

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文