在Java中,是否可以使用方法/构造函数的参数作为switch语句、case常量?
在 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
与 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 acase
value either.java 只能在
case
部分使用常量java can use only constants in the
case
part