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

当可能存在空指针时,如何避免冗余的try-catch语句?

孙光临
2023-03-14
public class Shop {
    public metadata metadata;
    public String nameZh;
    public String nameEn;
    public String type;
    public String hash;

    public class metadata{
        public String typeEn;
        public String typeZh;

        public String getTypeEn() { return this.typeEn; }
        public String getTypeZh() { return this.typeZh; }
    }

    public metadata getMetadata() { return this.metadata; }
    public String getNameZh() { return this.nameZh; }
    public String getNameEn() { return this.nameEn; }
    public String getType() { return this.type; }
    public String getHash() { return  this.hash; }
    public String toString() {
        return getMetadata().getTypeEn()+", "+getMetadata().getTypeZh()+", "
                +getNameZh()+", "+getNameEn()+", "+ getType()+", "+getHash();
    }
}
 
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Shop$metadata.getTypeEn()" because the return value of "Shop.getMetadata()" is null
    at xlsxWorker.writeShop(xlsxWorker.java:77)
    at xlsxWorker.writeOutput(xlsxWorker.java:51)
private static void writeShop(Row current, Shop shop){
        Cell cell = current.createCell(0);
        try{
            cell.setCellValue(shop.getMetadata().getTypeEn());
        }catch (NullPointerException e){
            cell.setCellValue("null");
        }
        cell = current.createCell(1);
        try{
            cell.setCellValue(shop.getMetadata().getTypeZh());
        }catch (NullPointerException e){
            cell.setCellValue("null");
        }
        cell = current.createCell(2);
        try{
            cell.setCellValue(shop.getNameZh());
        }catch (NullPointerException e){
            cell.setCellValue("null");
        }
        cell = current.createCell(3);
        try{
            cell.setCellValue(shop.getNameEn());
        }catch (NullPointerException e){
            cell.setCellValue("null");
        }
        cell = current.createCell(4);
        try{
            cell.setCellValue(shop.getType());
        }catch (NullPointerException e){
            cell.setCellValue("null");
        }
        cell = current.createCell(5);
        try{
            cell.setCellValue(shop.getHash());
        }catch (NullPointerException e){
            cell.setCellValue("null");
        }
    }

我如何避免在这里过度使用试捕?我如何简化裁员

共有1个答案

程枫
2023-03-14

您可以使用默认值初始化Pojo,如

  1. 字符串“”
  2. null作为字符串文本“null”

更新

if(shop.getMetadata() != null)
{ 
//your brilliant code 
}
 类似资料:
  • 我正在使用Guava缓存热数据。当缓存中不存在数据时,我必须从数据库中获取数据: 我的问题是当数据不存在于数据库中时,我希望它返回并且不做任何缓存。但Guava保存与缓存中的关键字,并抛出一个异常,当我得到它: com.google.common.cache.CacheLoader$InvalidCacheLoadExcION: CacheLoader为shisoft键返回null。 我们如何避免

  • 理想的情况下,我希望我的应用程序只有顶级的try/catch,大多数的例外只是冒出来。但有了它,您将得到UnhandledPromiseRejectionWarning。 我的问题是,而不是再放一个。后面抓。那么,有没有办法绕过?谢谢!

  • 我有以下课程: 该类包含两个可选值,我想提供所有可能的构造函数排列。第一个版本不初始化任何内容,第二个版本只初始化第一个值,第三个版本只初始化第二个值。 最后一个构造函数是第二个和第三个构造函数的组合。但这是不可能写下来的,因为代码失败了。 是否可以在没有任何代码冗余的情况下(也不调用相同的setter方法)编写最后一个构造函数?

  • 问题内容: 我的问题是我必须在try语句中设置变量,否则会出现编译错误。 稍后我需要使用该变量,但现在超出了范围,所以我相信。我在try语句外部初始化了该变量并将其设置为null,我以为可以在外部访问它,但仍然得到了。 下面的代码,其中有很多代码使阅读变得更容易-我知道这是不好的代码,但是我是Servlets的新手,只想看看它与所有活动部件一起运行时应如何工作。 我创建了另一个类,该类调用crea

  • 我的主要问题是,我正在使用try-catch执行resttemplate.exchange,并在子句try之前声明一个空值变量,然后在try中使用它。最后,我的方法返回一个值为RESTTemplate的响应。 本文的预期结果是用Sonarqube解决这个问题。如何将“responsedto”的初始化没有“null”,因为是在声纳上抛出问题。 我已经尝试将“responseEntity respon

  • 有没有可能编写这样的内容,并且避免检查元素是否为空,集合是否为空: 我找到了这样的东西http://winterbe.com/posts/2015/03/15/avid-null-check-in-/ 基本上,我想要实现的是避免层次结构中如果带有多个检查天气对象的语句为null或集合为空。我在上面的文章中读到,这是可能的,可选的“空检查在引擎盖下自动处理。” 如果已经有了一些解决方案,很抱歉复制,