我是Java自动箱的忠实拥护者,因为它节省了许多丑陋的锅炉板代码。但是,我发现在数字对象可能为null的某些情况下,自动拆箱会令人困惑。有什么方法可以检测带有Javac警告的代码库中自动拆箱的位置?由于我找不到任何东西,都将对任何其他检测拆箱发生的解决方案(例如Findbugs或Eclipse特定的编译器警告)表示赞赏。

为了澄清,我不希望在拳击上生成任何警告 - 只能拆箱。

这是一些可能导致令人困惑的NullPoInterExceptions的简单示例:

class Test {
    private Integer value;

    public int getValue() {
        return value;
    }
}
有帮助吗?

解决方案

Eclipse将使您的语法色彩拳击和拆箱操作(而不是另一个)。我将它们设置为鲜红色:如果这两次发生,这意味着我在匹配的参数和参数方面一直很草率。

其他提示

是的。在Eclipse中:

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

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

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

我个人更喜欢第一种方法。总的来说,我认为您不会有太多的情况,应该有一个零号码。

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

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

约书亚·布洛克(Joshua Bloch)在他的书《有效的爪哇》中解决了这一点。基本上,编译器正试图为您做更多的预期。换句话说,这种类型的问题通常与使用相关,因此很难“发现错误”,因为错误从语义上讲,根本不存在。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top