我是否应该检查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 方法确实返回了有效的ToolBar
对象,我是否仍需要检查getSupportActionBar()
方法,或者只是忽略警告是否安全?
答案 0 :(得分:3)
这可能会产生NullPointer异常。
您已创建新的工具栏对象,可以使用toolbar.setTitle(getIntent().getStringExtra(TITLE_KEY));
设置标题。在致电setSupportActionBar(toolbar);
无需调用getSupportActionBar()
,因为已设置的操作栏是工具栏。因此,您可以直接使用该对象来编辑工具栏。这比getSupportActionBar();
答案 1 :(得分:2)
但如果你想要双重确定你可以检查空
答案 2 :(得分:0)
为避免出现此警告,您始终可以检查ActionBar
对象是否为空。
ActionBar mActionBar = getSupportActionBar();
if (mActionBar != null) {
mActionBar.setTitle(getIntent().getStringExtra(TITLE_KEY));
}
答案 3 :(得分:0)
不,你不应该检查这个。因为如果假设失败(例如,如果findViewById(R.id.toolbar)
因为您在项目中的另一个文件中引入了错误而开始返回null
),那么执行希望抛出NullPointerException,所以你在测试时很容易找到错误。
换句话说:在我看来,最好的方法是fail fast。
我的代码看起来像是这样,其中的评论使警告无声:
//noinspection ConstantConditions: Action bar should always be present. If not, we prefer a NullPointerException here.
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);