我收到 Findugs 错误“一个装箱的值被取消装箱,然后立即重新装箱”。
这是代码:
Employee emp = new Employee()
Long lmt = 123L;
emp.setLimit(Long.valueOf(lmt));
在此,Employeelimit
字段的类型为Long
。你能告诉我错误是什么吗?
我收到 Findugs 错误“一个装箱的值被取消装箱,然后立即重新装箱”。
这是代码:
Employee emp = new Employee()
Long lmt = 123L;
emp.setLimit(Long.valueOf(lmt));
在此,Employeelimit
字段的类型为Long
。你能告诉我错误是什么吗?
问题是您正在转换Long
-> long
-> Long
。
所以在后台:
Long.valueOf(lmt)
转换Long
为long
emp.setLimit(<long>);
再次转换long
为Long
从 Java 5 开始自动装箱 => 您的代码应如下所示:
Employee emp = new Employee()
Long lmt = 123L;
emp.setLimit(lmt);
甚至:
Employee emp = new Employee()
long lmt = 123L;
emp.setLimit(lmt);
发生这种情况是因为Long.valueOf(long)
会将您的lmt
from Long
to拆箱long
,只是为了Long
再次获得。正如你所说limit
的那样Long
,你不需要使用Long.valueOf
,只需使用var:
emp.setLimit(lmt);
emp.setLimit(Long.valueOf(lmt));
Long.valueOf
接受一个long
值,但你传递一个Long
值——强制拆箱。然而,紧接着,Long.valueOf
重新装箱该值并且表达式Long
再次计算为 a。FindBugs 检测到不必要的转换链Long
-> long
-> Long
。