美文网首页
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