什么时候应该在实施之前检查视图 != null?

When should you check if a view != null before implementing it?

我正在查看 Cheesesquare 以学习一些新的设计工具,我遇到了这段让我感到疑惑的代码。代码找到一个视图,然后在继续其设置之前检查它是否为空。

假设视图存在且 ID 匹配,为什么视图 return 会为空?

我相信编写这段代码的人的专业知识,我认为这不是一个错误,但它的目的是什么?什么时候应该检查空值,什么时候不需要?

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    if (navigationView != null) {
        setupDrawerContent(navigationView);
    }

    ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
    if (viewPager != null) {
        setupViewPager(viewPager);
    }

...

private void setupViewPager(ViewPager viewPager) {
    Adapter adapter = new Adapter(getSupportFragmentManager());
    adapter.addFragment(new CheeseListFragment(), "Category 1");
    adapter.addFragment(new CheeseListFragment(), "Category 2");
    adapter.addFragment(new CheeseListFragment(), "Category 3");
    viewPager.setAdapter(adapter);
}

private void setupDrawerContent(NavigationView navigationView) {
    navigationView.setNavigationItemSelectedListener(
            new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {
            menuItem.setChecked(true);

如果出于某种原因 findViewById(R.id.nav_view) return 为空,则视图将 return 为空。例如,如果缺少 nav_view,就会发生这种情况。由于该函数有可能 returning null,因此检查 null 值以避免 NullPointerException.

使用下面提到的代码的主要目的是确保 viewPager 在设置之前不会返回空值,否则会导致应用程序崩溃。使用此代码的人试图安全地使用代码,并确保应用程序将按预期工作,并且在任何情况下都不会因 viewPager 返回空值而崩溃。

if (viewPager != null) {
   setupViewPager(viewPager);
}

除了其他的回答,我只想说明一点。因为我们不知道该代码库的全部内容,所以我假设该用户正在编写 his/her 代码以实现模块化。有时我们可能希望动态添加视图,绑定的时机让我们非常谨慎。在这些情况下,我们希望确保我们尝试加载的视图不为空。