java - 在现有 xmlbeans Java 代码库中处理嵌套 null 检查的实用方法?

标签 java nullpointerexception xmlbeans

这是一个很常见的问题,但我需要说的是,您建议的问题是重复的,不包含适合我们情况的解决方案。

在工作中,我们在一个已有 8 年历史的代码库上使用 xmlbeans,微妙地说,它没有得到很好的处理。当然,真正的解决方案是我们不应该使用 null 作为信息(并且可能根本不使用 xmlbean),但我正在寻找处理以下问题的最不可怕的方法:

如果我们有一个 Person 实体,它可以选择性地具有 Wallet 子实体,它可以选择性地具有 WalletItems 子实体,它可以选择性地具有可以具有 CardNumber 的 Card 子实体,那么检查 Person 是否存在的最实用方法是什么至少有一个卡号?

我们提出了三种可行的解决方案,以及团队应该坚持哪一种的争论:

isCardHolder(Person person){
    if (person != null && person.getWallet != null && 
        person.getWallet.getWalletItems != null &&
        person.getWallet.getWalletItems.get(0) != null && // Just a dirty example, don't worry here
        person.getWallet.getWalletItems.get(0).getCard != null &&
        person.getWallet.getWalletItems.get(0).getCard.getCardNumber != null){
        return true;
    } else {
        return false;
}

或者:

isCardHolder(Person person){
    Wallet wallet = (Person != null ? person.getWallet : null);
    WalletItems[] walletItems = (wallet != null ? wallet.getWalletItems : null);
    // etc etc
    if (card.getCardNumber != null) {
        return true;
    } else {
        return false;
    }
}

或者甚至:

isCardHolder(Person person){
    try {
        if (person.getWallet.getWalletItems.get(0).getCard.getCardNumber != null){
            return true;
        }
    } finally {
        return false;
    }
}

我个人的偏好是烧掉它并重新开始,或者至少放弃 xmlbeans,这样我们就可以在标准问题 on this topic 中使用空对象模式或其他任何内容。但我们现在仍坚持使用它,太多的东西取决于它。

最佳答案

Robert C. Martin 在《整洁代码》中关于函数的一些引述。

The first rule of functions is that they should be small.

Functions should do something, or answer something, but not both.

恕我直言,最好的方法可能是这样的:

    package com.example.sampl;
    
    public class MainSampl {
    
    
    
        public static void main(String[] args) {
            Person p = new Person();
            boolean correct = isCorrect(p);
            System.out.println(correct);
        }
    
        private static boolean isCorrect(Person person){
            return  isNotNull(person) &&
                    isNotNull(person.getWallet()) &&
                    isNotNull(person.getWallet().getWalletItems()) &&
                        isNotNull(person.getWallet().getWalletItems().getItems().get(0));
//etc
        }
    
        private static boolean isNotNull(Object data) {
            return data != null;
        }
    
    }

所以我认为我的 isNotNull 函数正在回答参数是否正常,然后 isCorrect 函数正在回答所有优选的检查对象是否正常。您的职能:

  1. 检查对象是否为空并回答是否可以。所以两件事都要做
  2. 第二个与第一个的做法相同,我认为它是 对我来说非常难以阅读。所以不可读并且同时做这两件事。
  3. 第三个相同。它正在做两件事 回答并做某事,但时间太长了。

还有我关于使用逻辑运算符的信息。我认为,如果代码中的逻辑运算符较少,则更有利于将来的重构,也更有利于一般阅读,因为

if you want to go fast, if you want to get done quickly, if you want your code to be easy to write, make it easy to read

关于java - 在现有 xmlbeans Java 代码库中处理嵌套 null 检查的实用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36042044/

相关文章:

java - 版本 :display-plugin-updates does not understand maven-enforcer-plugin

java - 立即将 Spark 中的 Json 字符串索引到 Elasticsearch

java - 从 String 类的 .equals() 方法获取 NPE。如何调试这个

spring - 哪个框架,工具或插件要求使用硬编码的 'database.xsd'文件名?

java - 使用 Java 和 MimeMessage 发送之前在默认邮件客户端中预览电子邮件

java - NullPointerException - 音频 - 2D java 平台游戏

java - 具有空对象模式的 DAO

java - 没有为 XSD 和 WSDL 文件生成 XMLBean 类 (Maven)

java - 使用 xmlbeans 创建并填充 xml 文档

java - 自定义 javafx 登录对话框的用户名和密码始终不正确