大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
万千封印
我知道编译器需要在编译时知道表达式才能编译一个开关,但是为什么foo.ba_常数不是呢?虽然从字段初始化后执行的任何代码的角度来看,它们都是常量,但它们不是编译时间常数在JLS所要求的意义上;见§15.28常量表达式的规格常数表达式1..这指的是§4.12.4最后变量它将“常量变量”定义为:我们称一个变量为原始类型或类型字符串,它是最终变量,并使用编译时常量表达式(§15.28)初始化为常量变量。变量是否为常量变量可能涉及类初始化(§12.4.1)、二进制兼容性(§13.1,§13.4.9)和确定赋值(§16)。在您的示例中,foo.ba*变量没有初始化器,因此不限定为“常量变量”。修复很简单;将foo.ba*变量声明更改为具有编译时常量表达式的初始化器。在其他示例中(初始化器已经是编译时常量表达式),将变量声明为final可能是我们需要的。可以将代码更改为使用enum而不是int常量,但这又带来了几个不同的限制:你,你们必包括default即使你有case的每一个已知值enum;见为什么打开枚举的开关是必需的?这个case标签必须是显式的enum值,而不是计算为enum价值。1-常量表达限制可概括如下。常量表达式a)可以使用原语类型和String只有,b)允许文字的初等(除了null)和常量变量,c)允许常量表达式(可能括号为子表达式),d)允许运算符(赋值运算符除外),++, –或instanceof,和e)允许将类型转换为原始类型或String只有。注意,这不包括任何形式的方法或lambda调用,new, .class. .length或数组订阅。此外,数组值的任何使用,enum值、原始包装类型的值、装箱和取消装箱都被排除在外。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/187935.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...