![](/img/trans.png)
[英]NullPointerException through auto-boxing-behavior of Java ternary operator
[英]Java Auto Boxing and conditional operator
在声纳中,我看到代码严重违反警告
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。
装箱的值被拆箱,然后立即重新装箱
它在第二行抱怨。 我不太了解它,何时以及如何将原语长时间转换为相应的类对象? 然后回来 ?
三元(或更准确地说,是条件 )表达式的返回类型(其中第二和第三操作数由一个基元和一个对应的带框版本组成)是该基元的返回类型。
(有关条件运算符类型的完整分析,请查看Java Specification 15.25 。)
由于此处的第二个操作数UNSPECIFIED_PARAMETER_KEY
是long
,而第三个value
是Long
,因此Java必须将value
拆箱为long
才能计算表达式。
此后,将返回Long
,因此将立即重新装箱value
。
您可以通过将您的常量UNSPECIFIED_PARAMETER_KEY
更改为Long
来解决此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.