繁体   English   中英

Java自动装箱和条件运算符

[英]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_KEYlong ,而第三个valueLong ,因此Java必须将value拆箱为long才能计算表达式。

此后,将返回Long ,因此将立即重新装箱value

您可以通过将您的常量UNSPECIFIED_PARAMETER_KEY更改为Long来解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM