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

有没有更好的方法在Java中执行空检查?[重复]

百里俭
2023-03-14

这可能看起来像是一个原始的问题,也可能是一个简单的实用程序库方法,我不知道。

目标是检查嵌套在两个对象下的布尔字段的值。

private boolean sourceWebsite(Registration registration) {
    Application application = registration.getApplication();
    if (application == null) {
        return true;
    }

    Metadata metadata = application.getMetadata();
    if (metadata == null) {
        return true;
    }

    Boolean source = metadata.getSource();
    if (source == null) {
        return true;
    }

    return !source;
}

我知道这可以在一个if()中完成。为了可读性,我在这里添加了多个ifs。

有没有一种方法可以简化上面的if语句,并有一个简单的实用程序类,在父对象是否为null时返回Boolean source的值?

共有3个答案

康泽宇
2023-03-14

您可以使用的另一个选项是try-catch块。如果您获得空指针异常,则返回true。

private boolean sourceWebsite(Registration registration) {
    try {
        return !registration.getApplication().getMetadata().getSource();
    }
    catch (NullPointerException e) {
        return true;
    }
}
汤玉宸
2023-03-14

如果其中任何一个为null,则以下内容将返回true。如果所有值都不为空,则返回!来源

private boolean sourceWebsite(Registration registration) {
      return registration.getApplication() == null 
      ||     registration.getApplication().getMetadata() == null
      ||     registration.getApplication().getMetadata().getSource() == null
      ||    !registration.getApplication().getMetadata().getSource();

}

更新:

如果希望每个getter不被多次调用,那么可以为每个对象声明变量,比如

private boolean sourceWebsite(Registration registration) {
      Application application;
      Metadata metadata;
      Boolean source;
      return (application = registration.getApplication()) == null 
      ||     (metadata = application.getMetadata()) == null
      ||     (source = metadata.getSource()) == null
      ||    !source;

 }
太叔乐家
2023-03-14

你可以使用java。util。可选,方法如下:

private boolean sourceWebsite(Registration registration) {
    return Optional.of(registration)
        .map(Registration::getApplication)
        .map(Application::getMetadata)
        .map(Metadata::getSource)
        .map(source -> !source)
        .orElse(Boolean.TRUE);
}

简而言之,如果任何getter返回null,那么它将返回true,并且!元数据。source否则。

 类似资料:
  • 问题内容: 我一直像这样处理JavaScript中的可选参数: 有更好的方法吗? 有没有在这种情况下使用会失败的情况? 问题答案: 如果传递了optionalArg,您的逻辑将失败,但评估为false-尝试使用此方法 或另一种习语: 使用任何一种最能传达您意图的习语!

  • 我正在尝试使用Typescript重载一个方法。Java或C#中通常的重载方式似乎不适用于Typescript。我不能这样做: 我四处搜索,发现我必须这样做: 对我来说,这个方法似乎很不整洁,很难维护,因为我把所有东西都乱七八糟地放在一个方法中,并使用if/ther语句来划分逻辑。 有没有更好的方法可以在Typescript中进行方法重载?

  • 问题内容: 我有一个多模块Maven项目,其中一个模块用于分发。 该发行版包含一个我想轻松执行的可执行jar。但是,要执行它,我必须键入类似以下内容: 简单键入以下内容将是更好的选择: 不幸的是,我找不到找到执行.jar的java目标的方法。exec目标实际上可以做到,但是有一个陷阱:jar包含一个嵌入式码头服务器,并且由于exec的工作方式(不使用与maven相同的JVM),除非我杀死进程,否则

  • 我有一个简单的python项目,其目录结构如下: 在config.py文件中,我有: 在run.py文件中,我有一个导入语句,如下所示: 当我使用命令行运行python3.5 run.py时,我得到错误: 从主要。配置导入my_config ImportError:没有名为“main”的模块 但当我在运行中添加此项时。py导入它的工作原理: 除了给出绝对路径或其他方式之外,还有其他更好的方法吗?请

  • 问题内容: 在过滤掉冗余信息时,我需要组合两个字符串集,这是我想出的解决方案,有没有人可以建议的更好方法?也许我忽略了内置的东西?谷歌没有任何运气。 问题答案: 由于a 不包含重复的条目,因此可以通过以下方式将两者合并: 两次添加都没有关系,该集合只包含一次元素…例如,不需要使用method 进行检查。

  • 问题内容: 我知道你可以打电话 如果它不是可执行文件,则会得到一个异常,但这是不安全的,因为运行可执行文件会产生副作用。 我想只检查扩展名在Windows上就足够了,但是有没有办法我可以读取* nix文件系统上的可执行文件呢? 找出文件在OS中是否可执行的最佳方法是什么? 问题答案: 参见java.io.File.canExecute()