Jea*_*ôté 3 java lint intellij-idea nullpointerexception intellij-15
我有一个可以返回空值的函数。因此,我使用了JetBrains批注,并将@Nullable批注放在函数顶部。
@Nullable
public static ConnectionManager getConnectionManager() {
return connectionManager;
}
Run Code Online (Sandbox Code Playgroud)
然后,我进行了皮棉检查。使用此功能时,我发现了4个地方,但未进行空检查。
之前:
Service.getConnectionManager().onAssetInfoChanged();
Run Code Online (Sandbox Code Playgroud)
后:
if(Service.getConnectionManager() != null) {
Service.getConnectionManager().onAssetInfoChanged();
}
Run Code Online (Sandbox Code Playgroud)
然后,我再次运行Lint检查。令我惊讶的是,我仍然得到:
Service.getConnectionManager().onAssetInfoChanged()第308行的方法调用“ ”可能会产生“java.lang.NullPointerException”。
我究竟做错了什么?这是Lint检查器中的错误吗?
检查员不是完全错误的。NullPointerException在这种情况下,您可能会有一个:因为Service.getConnectionManager()每次都在调用,所以我们无法绝对确定null即使不是第一次也不会第二次返回:getter可能有一个比两个方法调用之间并发return ...设置的逻辑复杂,或者可能没有将变量设置为null同时设置。
因此,您可以将代码重构为:
ConnectionManager manager = Service.getConnectionManager();
if (manager != null) {
manager.onAssetInfoChanged();
}
Run Code Online (Sandbox Code Playgroud)
假设的返回类型getConnectionManager()是type 的对象ConnectionManager。这样,就不可能NullPointerException在那条线上了。
| 归档时间: |
|
| 查看次数: |
459 次 |
| 最近记录: |