getSupportActionBar 可以在 setSupportActionBar 之后立即为 null 吗?

Can getSupportActionBar be null right after setSupportActionBar?

我是否应该取消检查 getSupportActionBar() 方法,即使在该方法的前面我已经使用 getSupportActionBar() 设置了支持操作栏?

onCreate()我有三行

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle(getIntent().getStringExtra(TITLE_KEY));

Android Studio 然后给我 警告

"Method invocation may produce java.lang.NullPointerException"

假设 findViewById 方法确实 return 一个有效的 ToolBar 对象,我是否还需要空检查 getSupportActionBar() 方法或忽略警告是否安全?

这可能会产生 NullPointer 异常。

您已经创建了一个新的工具栏object,您可以使用toolbar.setTitle(getIntent().getStringExtra(TITLE_KEY));设置标题。您需要在致电 setSupportActionBar(toolbar);

之前执行此操作

不需要调用getSupportActionBar(),因为设置的actionbar就是toolbar。所以你可以直接使用 object 来编辑你的工具栏。这比 getSupportActionBar();

我的建议是:- 不要检查 null,因为警告不是错误

你所说的警告说“它可能产生”。它没有说 'will must produce'。

但是如果你想双重确定你可以检查空值

为避免出现此警告,您始终可以检查 ActionBar 对象是否为空。

ActionBar mActionBar = getSupportActionBar();

    if (mActionBar != null) {
        mActionBar.setTitle(getIntent().getStringExtra(TITLE_KEY));
    }

不,你不应该检查这个。因为如果假设失败(例如,如果 findViewById(R.id.toolbar) 开始返回 null 因为你在项目的另一个文件中引入了错误),你 do 想要一个 NullPointerException被抛出,所以你测试的时候很容易发现错误。

换句话说:在我看来,最好的方法是fail fast

我的代码看起来像这样,带有一条消除警告的注释:

//noinspection ConstantConditions: Action bar should always be present. If not, we prefer a NullPointerException here.
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);