传递Null整数作为参数

时间:2015-04-16 19:30:40

标签: java

我有一个方法,通过重载这样一个整数baz作为可选参数...

public static void myMethod(String fooBar, Integer baz) {

    switch(baz){} // baz gets unboxed, NPE if it was null

    if(baz != null) {
        // Do something
    }
    else {
        // Do something else
    }
}

public static void myMethod(String fooBar) {
    myMethod(fooBar, null);
}

然而,它给了我一个关于else声明说它已死密码的警告。但是,如果在没有baz的情况下调用该方法,baz应该默认为null,因此这不应该是死代码。关于我在这里做错了什么的任何解释?即使我在重载方法中将baz设置为null,{{1}}如何始终为非空?

编辑:删除了实际代码,以便我的问题更容易阅读。

2 个答案:

答案 0 :(得分:4)

您在switch变量上使用Integer。 如果Integernull,则切换会抛出NullPointerException,但您无法捕获。

因此,程序流不可能达到else条件。

如果在Integer语句中使用

switch,则取消装箱。您必须在null语句之前明确检查switch。另请参阅How to use null in switch


P.S。重现问题的最小代码是:

public static void myMethod(String fooBar, Integer baz) {

    switch(baz){} // baz gets unboxed, NPE if it was null

    if(baz != null) {
        // Do something
    }
    else {
        // Do something else
    }
}

答案 1 :(得分:1)

Eclipse告诉您else语句是死代码的唯一方法是在baz语句之前为if分配一个新的整数,因此无法成为null

但是因为你只展示了代码的一部分,所以很难说。

修改

如果NullPointerException为空,则switch语句将抛出tlsVersionMax。这就是为什么你的声明是死代码。