2

在声纳中,我看到代码的重大违规警告

  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 。

装箱的值被拆箱,然后立即重新装箱

它在第二行抱怨。我不太明白,原始长何时以及如何转换为相应的类对象?然后回来 ?

4

1 回答 1

6

三元(或更准确地说,条件)表达式的返回类型,其中第二个和第三个操作数由一个基元和一个相应的装箱版本组成,是基元的返回类型。
(有关条件运算符类型的完整分析,请查看Java Specifications 15.25。)

由于这里的第二个操作数UNSPECIFIED_PARAMETER_KEY, 是 a long,而第三个操作数value是 a Long,Java 必须将valuea 拆箱才能long计算表达式。

在此之后, aLong将被退回,因此value立即重新装箱。

您可以通过将常量更改UNSPECIFIED_PARAMETER_KEYLong.

于 2013-05-31T12:20:37.447 回答