【问题标题】:Checking for null pointers检查空指针
【发布时间】:2013-05-23 22:37:39
【问题描述】:

我正在寻找一个短语,它在将空值传递给对象之前强制检查空值,然后当对象被调用时,在对象内的方法中检查的第一件事就是检查空指针异常。

我之前遇到过这个短语

你能帮忙吗?

抱歉,我没有澄清我的问题。

我之前在一本书中遇到过,他们提到了一个短语,在调用方法之前检查在哪里防止空指针传递,并且在被调用方法中完成的第一件事是检查空指针.

【问题讨论】:

  • 您所说的“短语”是指可以强制进行此类检查的表达式吗?

标签: java terminology


【解决方案1】:

防御性编码是一种实践。

public void go(String s)  
{  
    if(null == s)  
        //do something
    else
    //  normal execution.
}  

【讨论】:

  • 我认为断言这个术语也是有效的,但它属于防御性编码的范畴。另外我认为你应该添加像//do something like raise an exception/error/log etc这样的词
【解决方案2】:

空指针异常会在你有一些未初始化的对象时出现(未初始化对象的默认值为空)。

也就是说,如果你想检查对象是否为空,你应该使用比较运算符。喜欢:

if (object == null) {
    // do something
}

【讨论】:

    【解决方案3】:

    在创建对象之前,您可以使用单词assert 检查参数,即:

    assert yourValue != null
    

    默认情况下,断言在运行时被禁用。要启用它们,请将 option -enableassertions(或 -ea)传递给 JVM。

    另一种可能性(从 Java 7 开始)是在构造函数/方法中使用方法 requireNonNull direclty,这是构造函数的示例:

    public Foo(Bar bar, Baz baz) {
         this.bar = Objects.requireNonNull(bar, "bar must not be null");
         this.baz = Objects.requireNonNull(baz, "baz must not be null");
     }
    

    否则正如@Woot4Moo 所说,您可以使用if 声明。

    【讨论】:

    【解决方案4】:

    理论上,Object 的任何实例方法都可以工作,尽管没有一个因便宜而出众的方法。最有可能的两个是 theReference.hashCode() 和 theReference.equals(theReference)(或者可能是 theReference.equals(null)。Java 标准要求评估任何方法调用的效果,因此编译器或 JITC 不会消除这些调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-09
      • 1970-01-01
      • 1970-01-01
      • 2018-03-27
      相关资源
      最近更新 更多