【问题标题】:If using function that can return null如果使用可以返回 null 的函数
【发布时间】:2012-03-13 06:13:17
【问题描述】:

有一个函数 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 并将其分配给 int 变量 z ?它的类型不匹配。
  • 您编写的任何一个版本都不应该抛出,除非是 get 本身抛出。您确定您查看的是代码的正确部分吗?
  • 这就是为什么我把检查放在 if 条件中。
  • 那么,get() 是返回 T 还是 Integer? B() 似乎假设它是一个整数。
  • y.get() 仅当 y 为空时才会抛出空指针...或者可能是您的 get() 内部的某些逻辑抛出异常...

标签: java oop function if-statement


【解决方案1】:

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

当你有:

int z = y.get();

这就像说:

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

只需使用:

Integer z = y.get();

相反。然后你可以测试z是否为空。另一方面,如果y.get() 已经返回了一个非空值,那么如果它 then 返回一个null 值,我会感到惊讶——你会期望它返回相同的东西两次, 正确的?是否涉及其他线程?

另外,不清楚你的意思是什么:

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

我看不到“因此”在哪里......调用方法而不将返回值存储在变量中是可以的。如果这是抛出一个NullPointerException,那真的会暗示y 是空的。当然,如果您发布一个简短但完整的程序来演示问题,所有这些都会更容易诊断。

顺便说一句,不清楚您为什么首先要调用y.get() 两次。我会将代码重组为:

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

真的要调用两次吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 2018-07-04
    • 2021-05-27
    • 1970-01-01
    相关资源
    最近更新 更多