android避免空指针

java语言很容易出现NullpointException,如何在代码编写阶段就发现问题并且简化代码呢?

1.编写工具类来简化判空表达式
 if (sampleString != null && !sampleString.equals("")) {
            // ...
 }
 if (sampleList != null && sampleList.size() != 0) {
            // ...
 }

觉得上面的判空太过复杂?没关系,写个工具类,或者直接用 EmptyUtils

public static boolean isEmpty(CharSequence text) {
        return text == null || text.toString().equals("");
}

public static <T> boolean isEmpty(Collection<T> collection) {
        return collection == null || collection.isEmpty();
}
2.习惯的养成

1.对于容器,比如ArrayList,retrun Collections.emptyList() 而不是null;
2.对于字符串,return ""; 而不是return null;
3.对于其他对象,如果可以定义空对象/初始对象,则return这个对象。否则,return null;
4.对于请求从服务器返回的数据结构,每一层都需要判空,不然很容易出现空指针

3.使用注解
@NonNull
public String testNullPoint() {
        return null;//这里会有黄色的inspection
}

@Nullable
public String testNullPoint() {
        return null;//这里正常
}

默认情况下android studio默认会使用android.support.annotation中的annotation来做nullity的分析,如果你想更换,也可以自行更改配置:Settings --Editor--Inspections里搜索Null,然后 找到Java | Probable bugs | @NotNull/@Nullable problems,点击configure annotation即可.

4.使用Optional<T>

java8自带了Optional<T>类来解决NPE问题,但是这要求minSDK必须为24,所以我们可以自己实现,直接贴代码:

import java.util.Objects;

public class Optional<T> {

    private T value;

    private Optional() {
        this.value = null;
    }

    private Optional(T value) {
        this.value = Objects.requireNonNull(value);
    }

    public static<T> Optional<T> empty() {
        return new Optional<>();
    }

    public static<T> Optional<T> of(T value) {
        return new Optional<>(value);
    }

    public interface Action<T> {
        void apply(T value);
    }

    public void ifPresent(Action<T> action) {
        if (value != null) {
            action.apply(value);
        }
    }

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,982评论 19 139
  • 对象的创建与销毁 Item 1: 使用static工厂方法,而不是构造函数创建对象:仅仅是创建对象的方法,并非Fa...
    孙小磊阅读 2,031评论 0 3
  • 原链接:http://www.cnblogs.com/langtianya/p/3757993.html JDK各...
    把爱放下会走更远阅读 1,127评论 0 10
  • 中国式众筹华东同学会,大家各抒己见,求同存异。从陌生到认知,再到相互了解、相互理解、相互信任、相互需要,如果说我们...
    执着的石头阅读 150评论 0 0
  • 清晨 走在着熟悉的道路上 看着过往的商贩和行人 商贩的吆喝声唤醒着城市的早晨 行人的脚步声推动者城市的变化 一个人...
    浏小煚拓阅读 943评论 3 1