Java自动拆箱 - 是否有编译器警告?

时间:2010-01-09 13:28:27

标签: java boxing autoboxing unboxing

我是Java中自动装箱的忠实粉丝,因为它节省了许多难看的锅炉板代码。但是我发现自动拆箱在某些可能为null的情况下会引起混淆。有没有办法检测代码库中带有javac警告的自动拆箱位置?任何其他解决方案来检测仅出现拆箱(例如FindBugs或特定于Eclipse的编译器警告)将不胜感激,因为我找不到任何解决方案。

澄清我不希望在拳击时产生任何警告 - 仅取消装箱。

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

class Test {
    private Integer value;

    public int getValue() {
        return value;
    }
}

4 个答案:

答案 0 :(得分:5)

烨。在Eclipse中:

偏好设置 - > Java->编译器 - >错误/警告 - >潜在的编程问题 - >装箱和拆箱转换

答案 1 :(得分:2)

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

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

我怀疑这是一个警告案例。这是自动拳击的怪癖之一。

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