美文网首页
android避免空指针

android避免空指针

作者: 太阳晒得我丶好干瘪 | 来源:发表于2018-01-03 17:01 被阅读38次

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);
        }
    }

}

相关文章

网友评论

      本文标题:android避免空指针

      本文链接:https://www.haomeiwen.com/subject/ydiedxtx.html