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);
我是否应该取消检查 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);