FindBugs给我有关以下行的警告,该行invoiceNumber
是一个Integer
对象:
text.append(String.format("%010d-", (invoiceNumber == null) ? 0 : invoiceNumber));
警告是:“装箱的值被取消装箱,然后立即重新装箱”
现在,我认为我了解(取消)装箱,但是如果没有收到警告,我看不到您将如何做同样的事情?
我发现我可以改用以下代码来摆脱警告,但这似乎更加冗长:
int invNo = (invoiceNumber == null) ? 0 : invoiceNumber;
text.append(String.format("%010d-", invNo));
有人可以告诉我做上述事情的“正确”方法是什么?
顺便说一句,我已经看了相关的问题,并且我理解了这些问题是怎么回事,但这似乎与这些问题都不匹配。
(invoiceNumber == null) ? 0 : invoiceNumber)
表达式的类型为int
。invoiceNumber
在invoiceNumber
没有的情况下需要拆箱null
。
另一方面,String.format
期望单个String
参数后跟Object
引用,这意味着您int
将立即Integer
再次装箱。
您可以尝试使用来避免原始的拆箱操作(invoiceNumber == null) ? Integer.valueOf(0) : invoiceNumber)
,这会使此表达式返回Integer
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句