为什么 Android Studio 指示对象可能为 null,而实际上它不能为 null?

Why does Android Studio indicate that an object might be null when it cannot be?

这是我正在使用的代码:

ref.get().addOnCompleteListener(task -> {
    if (task.isSuccessful()) {
        DocumentSnapshot document = task.getResult();
        if (document.exists()) {
            Log.d(TAG, "DocumentSnapshot data: " + document.getData());
        }
    }
});

这就是 Android Studio 突出显示错误的方式:

据我了解:

A successfully completed task will never pass null for the DocumentSnapshot.

如何在不检查无效性的情况下解决这个问题?谢谢!

Why does Android Studio indicate that an object might be null when it cannot be?

因为 lint 无法知道。 document.exists() 通常可以 return null,这就是您看到警告的原因。 Lint 执行基本检查并且不知道有关 Firebase API 的详细信息。您甚至可以使用 Java Core API.

重现此行为

How can I solve this without checking for nullity? Thanks!

如果您 100% 确定它永远不会为空,您可以使用

@SuppressWarnings("ConstantConditions")

但我不建议这样做,因为您不知道 Firebase API 将来是否会发生变化。也许下一个版本的 Firebase 将允许 null returns.