10

我是 Java 自动装箱的忠实粉丝,因为它节省了很多丑陋的样板代码。但是,我发现在 Number 对象可能为空的某些情况下,自动拆箱会让人感到困惑。有什么方法可以检测代码库中发生自动拆箱的位置并带有 javac 警告?任何其他仅检测拆箱事件的解决方案(例如 FindBugs 或 Eclipse 特定的编译器警告)将不胜感激,因为我找不到任何解决方案。

为了澄清,我不希望在装箱时产生任何警告 - 只拆箱。

下面是一些可能导致混淆 NullPointerExceptions 的代码的简单示例:

class Test {
    private Integer value;

    public int getValue() {
        return value;
    }
}
4

4 回答 4

5

是的。在 Eclipse 中:

首选项->Java->编译器->错误/警告->潜在的编程问题->装箱和拆箱转换

于 2010-01-09T13:31:02.500 回答
2

不幸的是没有。这是自动拆箱号码的问题之一。你可以

  • 将其初始化为默认值,例如private Integer value = 0
  • 检查是否为空return value != null ? value : 0

我个人更喜欢第一种方法。一般来说,我认为你不会有太多情况下应该有一个空数字。

另外,为什么要使用大整数来存储值。如果你只返回一点 int,为什么不这样存储呢?

于 2010-01-09T14:24:24.513 回答
1

Eclipse 将允许您进行语法颜色装箱和拆箱操作(但不是其中一种)。我将它们设置为鲜红色:如果发生任何一种情况,这意味着我在匹配参数和参数方面一直很草率。

于 2010-01-09T14:51:04.300 回答
1

我怀疑这将是一个警告案例。这是自动装箱的怪癖之一。

Joshua Bloch 在他的“Effective Java”一书中解决了这个问题。基本上,编译器正在尝试为您做更多的事情。换句话说,这类问题通常与使用有关,因此很难“发现错误”,因为从语义上讲,错误根本不存在。

于 2010-01-09T16:37:24.663 回答