优雅的避免空指针的示例

Posted duenboa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优雅的避免空指针的示例相关的知识,希望对你有一定的参考价值。

1) 从已知的String对象中调用equals()和equalsIgnoreCase()方法,而非未知对象。
DEMO:
String str = null;
str.equals("value");  ===> "value".equals(str);


2) 当valueOf()和toString()返回相同的结果时,宁愿使用前者。

BigDecimal bd = new BigDecimal();
bd.toString() ; =====> String.valueOf(bd);
public static void main(String[] args) {
Object o = null;
String s = String.valueOf(o); -- 不会出空指针
s = o.toString(); -- 空指针
System.out.println(s);
}
String.valueOf源码:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}

3) 使用null安全的方法和库 有很多开源库已经为您做了繁重的空指针检查工作。其中最常用的一个的是Apache commons 中的StringUtils。你可以使用StringUtils.isBlank(),isNumeric(),isWhiteSpace()以及其他的工具方法而不用担心空指针异常。

StringUtils方法是空指针安全的,他们不会抛出空指针异常
System.out.println(StringUtils.isEmpty(null));
System.out.println(StringUtils.isBlank(null));
System.out.println(StringUtils.isNumeric(null));
System.out.println(StringUtils.isAllUpperCase(null));

4) 避免从方法中返回空指针,而是返回空collection或者空数组。

这个Java最佳实践或技巧由Joshua Bloch在他的书Effective Java中提到。这是另外一个可以更好的使用Java编程的技巧。通过返回一个空collection或者空数组,你可以确保在调用如size(),length()的时候不会因为空指针异常崩溃。Collections类提供了方便的空List,Set和Map: Collections.EMPTY_LIST,Collections.EMPTY_SET,Collections.EMPTY_MAP。这里是实例。

public List getOrders(Customer customer){
    List result = Collections.EMPTY_LIST;
    return result;
}

你同样可以使用Collections.EMPTY_SET和Collections.EMPTY_MAP来代替空指针。


5)使用包装类型做参数传递和映射.
6) 为entity指定默认值 比如电话号码默认为00000000000
7) 定义数据库中字段是否可以为空.做好非空约束, 避免程序中判断!=null







以上是关于优雅的避免空指针的示例的主要内容,如果未能解决你的问题,请参考以下文章

没用 Java 8,怎么优雅地避免空指针?

没用 Java 8,怎么优雅地避免空指针?

Java 8 Optional:优雅地避免 NPE

片段中的 EditText 上的空指针异常 [重复]

片段中的空指针异常

使用回收器适配器获取空指针