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

时间:2016-11-12 20:10:05

标签: 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;
}

我正在使用Android Studio / IntelliJ。我知道我可以使用@SuppressWarnings I have seen this question但这会使代码变得更加丑陋。

2 个答案:

答案 0 :(得分:7)

  

我希望每次想要使用时都避免编写getView!= null   getView?

您可以使用 Null对象模式来避免在程序中的任何位置检查!= 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
      }
    }

(2)如果没有可用的视图,请使用EmptyView:

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

    public void showView(){
        getView().show();
    }

您可以查看Wiki here更多信息& Java示例。

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

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

P.S。:此选项适用于Java8和不使用Java8。 如果您使用的是Java8,那么更喜欢使用@janos的答案中给出的Optional

答案 1 :(得分:4)

您可能有兴趣使用在Android的API级别24中添加的Optional,例如:

private Optional<View> getView() {
    return Optional.ofNullable(view);
}

public void showView() {
    getView().ifPresent(View::show);
}