使用java中的方法避免!= null

Uba*_*hat 4 java android intellij-idea

在我的下面的例子中,我想避免每次我想使用getView时编写getView!= null.为了保持清洁,我创建了一个方法hasView()来检查我.但是我仍然收到警告.有没有办法解决?

import android.support.annotation.Nullable;

public void showView(){
    if(hasView()){
        getView().show(); // Shows warning Method invocation 'showLoading' may produce 'java.lang.NullPointerException'
    }
}


boolean hasView(){
    return getView() != null;
}

@Nullable
private View getView(){
    return view;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Android Studio/IntelliJ.我知道我可以使用@SuppressWarnings 我已经看到了这个问题,但是这使代码变得更加丑陋.

dev*_*per 7

每次我想使用getView时,我想避免编写getView!= null?

您可以使用Null Object模式来避免检查!= null程序中的任何位置,代码如下所示:

(1)定义一个EmptyView类

   public EmptyView {

     //Define a static emptyView, so that we can reuse the same object
     public static final EmptyView emptyView = new EmptyView();

     public show() {
         //does nothing
      }
    }
Run Code Online (Sandbox Code Playgroud)

(2)在没有可用视图的情况下使用EmptyView:

    //other classes:
    private View getView(){
        if(viewAvailable) {
           return view;
        } else {
            return EmptyView.emptyView;
        }  
    }

    public void showView(){
        getView().show();
    }
Run Code Online (Sandbox Code Playgroud)

您可以在这里查看Wiki 更多信息和Java示例.

当您null从各种方法返回时,它们可能会导致NullPointerException程序中的程序,并且在较大的项目中将变得非常难以调试.

因此,null从方法返回(并且应该避免它们)是一种不好的做法,这就是Spring API 在尝试从/ classes(如上所述的对象)中检索数据时通常返回空list/ set对象(而不是)的原因.nullDAORepositoryEmptyView

PS:此选项适用于Java8和不使用Java8.如果您使用的是Java8,那么更愿意使用@janos Optional的答案中给出的内容