如果使用可以返回null的函数

时间:2012-03-13 06:13:18

标签: java oop function if-statement

有一个函数get()返回一个值,如果它在ArrayDeque中,否则返回 null ,即x可以是某个值或null。如果get()返回x,那么函数B()应该执行一些计算,否则不应该做任何事情。

T get()
{
    //compute x
    return x;
}

void B()
{
     int z;
     if(y.get()!=null)
     {
          z=y.get(); // gives null pointer exception
          .....
     }
}

问题是y.get()已经返回未赋值给任何变量的值,因此给出了空指针异常。如果我使用if((z=y.get()) != 0)之类的东西,那么在x为null的情况下它会给出异常。我该如何实现这一功能?

1 个答案:

答案 0 :(得分:4)

我怀疑这是ArrayDeque<Integer>,对吧?

当你有:

int z = y.get();

这就像说:

int z = ((Integer) y.get()).intValue();

只需使用:

Integer z = y.get();

代替。然后,您可以测试z是否为空。另一方面,如果y.get()已经返回了一个非空值,那么我很惊讶它是然后返回null值 - 你希望它返回同样的事情两次,对吧?是否涉及其他线程?

此外,目前还不清楚你的意思是什么:

  

问题是y.get()已经返回未分配给任何变量的值,因此会给出空指针异常。

我在这里看不到“因此”的位置...调用方法并且不将返回值存储在变量中也没关系。如果那是NullPointerException,那么它确实会建议y为空。当然,如果您发布一个简短但完整的程序来证明问题,那么所有这些都会更容易诊断。

顺便说一句,目前尚不清楚为什么你首先要拨打y.get()两次。我会将代码重组为:

void B()
{
     Integer z = y.get();
     if (z != null)
     {
         // Use z
     }
}

真的想要两次打电话吗?