Lav*_*Lav 2 java autoboxing sonarqube
在声纳中,我看到了代码的重大违规警告
public Long getValue(FieldType fieldType) {
Long value = paramLevelMap.get(fieldType); // ok returns Long not long
return value == null ? UNSPECIFIED_PARAMETER_KEY : value; // complaints here
}
Run Code Online (Sandbox Code Playgroud)
其中'UNSPECIFIEDpa_PARAMETER_KEY'是pvt static long,'value'也很长.
盒装值未装箱,然后立即重新装箱
它在第二行抱怨.我不太明白它,何时原始长度被转换为相应的类对象?然后回来 ?
三元(或更正确的,条件)表达式的返回类型,其中第二和第三操作数由一个基元和一个对应的盒装版本组成,是基元的返回类型.
(有关条件运算符类型的完整分析,请查看Java规范15.25.)
由于这里的第二个操作数UNSPECIFIED_PARAMETER_KEY是a long,而第三个value是a Long,因此Java必须将unbox转换value为a long来评估表达式.
在此之后,Long将返回a,因此value立即重新装箱.
您可以通过将常量更改UNSPECIFIED_PARAMETER_KEY为a 来解决此问题Long.