在 Sonar 中,我看到代码的重大违规警告
public Long getValue(FieldType fieldType) {
Long value = paramLevelMap.get(fieldType); // ok returns Long not long
return value == null ? UNSPECIFIED_PARAMETER_KEY : value; // complaints here
}
其中“UNSPECIFIED_PARAMETER_KEY”是 pvt static long ,“value”也是 long。
Boxed value is unboxed and then immediately reboxed
它在第二行提示。我不太明白,原始 long 何时以及如何转换为相应的类对象?然后回来?
最佳答案
三元(或更准确地说,条件)表达式的返回类型是原语的返回类型,其中第二个和第三个操作数由一个原语和一个相应的装箱版本组成。
(有关条件运算符类型的完整分析,请参阅 the Java Specifications 15.25 。)
由于此处的第二个操作数 UNSPECIFIED_PARAMETER_KEY
是一个 long
,而第三个操作数 value
是一个 Long
>,Java 必须将 value
拆箱为 long
才能计算表达式。
此后,将返回一个Long
,因此value
立即重新装箱。
您可以通过将常量 UNSPECIFIED_PARAMETER_KEY
更改为 Long
来解决此问题。
关于Java 自动装箱和条件运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16856998/