Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中优雅地处理空值_Java_Nullpointerexception - Fatal编程技术网

如何在Java中优雅地处理空值

如何在Java中优雅地处理空值,java,nullpointerexception,Java,Nullpointerexception,在这种情况下,我必须将值从一个对象复制到另一个对象。对于每个字段,copy语句都用以下剪下的样板代码包装: if (a.getC() != null) { b.setC(a.getC()); } 我看了番石榴predition.checkNotNull(…),但它仍然抛出我试图回避的NPE 我如何才能以更自然的方式做到这一点?Apache commons-lang3提供了以下功能: b.setC(ObjectUtils.defaultIfNull(a.getC(), b.getC()))

在这种情况下,我必须将值从一个对象复制到另一个对象。对于每个字段,copy语句都用以下剪下的样板代码包装:

if (a.getC() != null) {
   b.setC(a.getC());
}
我看了番石榴
predition.checkNotNull(…)
,但它仍然抛出我试图回避的NPE


我如何才能以更自然的方式做到这一点?

Apache commons-lang3提供了以下功能:

b.setC(ObjectUtils.defaultIfNull(a.getC(), b.getC()));

但我必须承认,我不确定这是否真的是一种改进。

您可以使用var args创建一个方法,检查所有args,以获得您的
if
语句:

public boolean argsNotNull(Object ... objs) {
    boolean b = true;
    for(Object o : objs) {
        if(o == null) {
            b = false;
            break;
        }
    }
    return b;
}
然后像这样使用它:

if(argsNotNull(a)) {
    Object c = a.getC();
    if(argsNotNull(b, c)) { // A null 'c' object may be valid here, depends on your logic
        b.setC(c);
    }
}

由于此方法使用var args,您可以根据需要为其提供任意多个args,但它无法在当前状态下使用原语。

b.C值,应该准确反映a.C中的内容吗?在这种情况下,如果a.C为空,那么b.C将为空,并且实际上不需要空检查

否则,为了避免使用大括号,可以执行以下操作:

b.setC((a.getC() == null) ? b.getC() : a.getC());

这假设b中的getter和setter完全匹配。如果a中的C为null,则setC()fromgetC()实际上什么也不做。

它没有检查a或b是否为null。如果
b.setC
设置的值为null,是否有问题?如果不是,则不需要空检查。如果
a
b
为空,则此代码将抛出NPE的唯一方法。这并不能真正解决
null
检查的问题。它只是把它委托给另一种方法。@Jeffrey OP要求更自然一些。这不如Groovy那么好,但它比(
a!=null&&b!=null&&c!=null
)或大量非特定的try/catch块更好。这符合我的需要。谢谢。