gpt4 book ai didi

java - 为什么我在进行空值检查时仍会收到 IntelliJ 中可能存在 NPE 的警告?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:54:11 27 4
gpt4 key购买 nike

我有一个可以返回空值的函数。所以我使用了 JetBrains 注释并在函数顶部放置了一个 @Nullable 注释。

@Nullable
public static ConnectionManager getConnectionManager() {
return connectionManager;
}

然后,我运行了 Lint 检查。当我使用这个函数时,我发现了 4 个地方,但我没有做任何 null 检查。

之前:

Service.getConnectionManager().onAssetInfoChanged();

之后:

if(Service.getConnectionManager() != null) {
Service.getConnectionManager().onAssetInfoChanged();
}

然后我再次运行 Lint 检查。令我大吃一惊的是,我仍然得到:

Method invocation 'Service.getConnectionManager().onAssetInfoChanged()' at line 308 may produce 'java.lang.NullPointerException'.

我做错了什么?这是 Lint 检查器中的错误吗?

最佳答案

检查员并没有完全错。在这种情况下,您可能会遇到 NullPointerException:因为您每次都调用 Service.getConnectionManager(),所以我们无法绝对确定它会成功即使不是第一次,也不会第二次返回 null:getter 的逻辑可能比 return ... 更复杂,或者变量可能已设置在两个方法调用之间同时为 null

因此,您可以将代码重构为:

ConnectionManager manager = Service.getConnectionManager();
if (manager != null) {
manager.onAssetInfoChanged();
}

假设 getConnectionManager() 的返回类型是 ConnectionManager 类型的对象。有了这个,就不可能在该行上出现 NullPointerException

关于java - 为什么我在进行空值检查时仍会收到 IntelliJ 中可能存在 NPE 的警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34792835/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com