代码之家  ›  专栏  ›  技术社区  ›  Steve

使用数组时处理空指针的干净方法

  •  0
  • Steve  · 技术社区  · 14 年前

    我有下面的代码,它正在向arraylist添加一些字符串。由于有人没有正确地填写它,它经常会有一个空变量。我没有usr对象,所以很遗憾我不能修改它。如果其中一个值为空,是否有简单明了的方法来添加默认值?我不介意它是空的,但我不想程序崩溃!

        results.add(usr.getName());
        results.add(usr.getAbout());
        results.add(usr.getBirthday());
        results.add(usr.getEmail());
        results.add(usr.getGender());
    
    5 回复  |  直到 14 年前
        1
  •  4
  •   Jeff Storey    14 年前

    String name = usr.getName();
    if ( name != null ) {
       results.add(name);
    }
    

    results.add(usr.getName() != null ? usr.getName() : "");
    

    尽管这需要调用getName两次,但这并不重要,因为我假设这只是一个简单的getter。

    编辑#1

    results.add(getValue(usr,"name"))
    results.add(getValue(usr,"about"))
    
    String getValue(def usr, String prop) {
       return usr."${prop}" ?: ""
    }
    
        2
  •  1
  •   Peter Tillemans    14 年前

    package com.acme.util;
    
    class Cleaner {
    
        public static String clean(String s, String defaultValue) {
            return s == null ? defaultValue : s;
        }
    
        public static Integer clean(Integer v, Integer defaultValue) {
            return v == null ? defaultValue : v;
        }
    
        public static Date clean(Date d, Date defaultValue) {
            return v == null ? defaultValue : d;
        }
    
        // ... and so on ...
    

    }

    然后使用如下:

    import static com.acme.util.Cleaner.*;
    
    results.add(clean(usr.getName(),"John Doe"));
    ...
    

    Ricky Clarkson指出,这一点可以用泛型表达得更短,如:

    public static <T> T getOrElse(T t, T defaultValue) { return t == null ? defaultValue : t; }
    
        3
  •  0
  •   Justin Niessner    14 年前

    内联检查null返回值,然后使用条件运算符将null替换为默认值:

    results.add(usr.getName() != null ? usr.getName() : "default");
    
        4
  •  0
  •   Carl Manaster    14 年前

        5
  •  0
  •   Colin Hebert    14 年前

    似乎您根本不需要这些值,而且空字符串不会导致任何结果。

    result.remove(null);
    


    资源: