当前位置: 首页 > 知识库问答 >
问题:

如何检查对象和嵌套字段是否为null[重复]

魏航
2023-03-14

我有一个对象,我想检查这个对象或嵌套字段是否为空。我想打印这个网状字段,但我应该检查某个级别是否为空,否则我会得到空指针异常。

我知道我可以做到:

if( object != null && object.A != null && object.A.B != null && object.A.B.C != null && object.A.B.C.D != null) { doSomething( object.A.B.C.D);}

但时间太长了。你知道更好的检查方法吗?

共有3个答案

元望
2023-03-14

假设这是一个防止方法误用的检查,所以不应该发生太多次。

只要捕获此异常,就会使值无效。

private boolean isValid(YourObject object){
    try{
         return object.A.B.C.D != null;
    } catch (NullPointerException npe){
        return false;
    }
}

当然,如果您正在进行大量验证并且这些验证返回false,则不要使用此解决方案。

编辑:

正如费尔多指出的那样,即使没有例外,使用try-catch也是有成本的。但使用这个答案,我可以假设这将是有限的,并且在这条独特的线路上没有太多的优化要做。

顾俊楚
2023-03-14

您可以使用返回所有子对象的方法在所有对象上实现一个接口,并创建一个递归调用自身以验证所有对象都已设置的方法。

娄利
2023-03-14

可选是Java 8中的一种好方法。

String value = foo.getBar().getBaz().toString();

可选的是:

String value = Optional.ofNullable(foo)
                       .map(Foo::getBar)
                       .map(Bar::getBaz)
                       .map(Baz::toString)
                       .orElse("EmptyString");
 类似资料:
  • 问题内容: 我有一个名为的对象。 它具有几个属性; 我将一个人对象设置为。 1.)我需要检查对象是否不为null;以下表达式正确吗? 2.)我需要知道ID是否包含一个Int。 但是,java不允许这样做。我该如何检查? 问题答案: An 不为null,如果未初始化,则可能为null 。 如果您希望整数可以为null,则需要使用代替。 此外该语句不能为真,因为如果为null,则将抛出a。所以正确的表

  • 问题内容: 我试图得到: 在我自己的脚本中,我以前只是使用它,因为我从来不需要作为属性: 因此,对于第二个对象,我想出了以下方法作为一种快速解决方案-大部分都能奏效。;) 问题是,这取决于浏览器是否强制执行只读属性,而并非所有人都这样做。 有没有好的替代品? 问题答案: 这可能很有趣: 它是DOM Level2的一部分。 更新2 :这是我在自己的库中实现它的方式:(以前的代码在Chrome中不起作

  • 我想检查一个对象是否未定义 这状态数据值[0]。名称 我尝试了以下操作,这些操作将显示类型错误。状态数据值在控制台中未定义。 我该怎么检查这个物体呢。状态值[0]。名称未定义? 我试图这么做 我的解决方案,多亏了pranav-c-balan 一个有效的例子

  • 问题内容: 我想在Swing中检查用户名和密码。 该检查适用于用户名,但不适用于JPaswordfield。我正在发布相关代码: 问题答案: 非常简单地获取文本,使用该文本返回文本的a,然后简单地获取数组的长度并检查它是否等于0:

  • 问题内容: 我有一个需要循环通过的嵌套JSON对象,每个键的值可以是String,JSON数组或另一个JSON对象。根据对象的类型,我需要执行不同的操作。有什么方法可以检查对象的类型以查看它是String,JSON对象还是JSON数组? 我尝试使用和,但似乎都没有用,因为这将为JSON对象和数组都返回一个对象,并且在我这样做时给出错误。 更具体地说,在将JSON解析为JS对象之后,有什么方法可以检

  • 问题内容: 我的服务器端代码返回一个值,该值成功时为json对象,失败时为字符串’false’。现在如何检查返回的值是否为json对象? 问题答案: 如果字符串是JSON,则jQuery.parseJSON()应该返回类型为“对象”的对象,因此您只需使用以下命令检查类型