Java 自动装箱和条件运算符

标签 java sonarqube autoboxing

在 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/

相关文章:

java - 有没有办法明确告诉 Android 系统将我的 Intent 解析为当前 Intent 操作的默认应用程序/Activity ?

unit-testing - 单元测试覆盖率实际上是如何完成的?

java - 公共(public)静态变量的 SonarQube 问题 | JAVA

java - int 与 int[] 区别 - 泛型内部自动装箱?

java - 从覆盖的 Tomcat 类访问应用程序代码

java - 将所有元素转换为字符串,无论数据类型如何

java - 了解 readResolve 方法

jenkins - 链接到 Jenkins 作业上的 SonarQube 不可用

java - 整数值比较

java - 自动装箱究竟发生在什么时候?