gpt4 book ai didi

android - 为什么 Android Architecture Components 的 Observer 中的 value 参数可以为空?

转载 作者:IT老高 更新时间:2023-10-28 13:40:29 26 4
gpt4 key购买 nike

来自架构组件的 LiveData 为接收者回调定义了一个具有可为空值的 Observer:

public interface Observer<T> {
/**
* Called when the data is changed.
* @param t The new data
*/
void onChanged(@Nullable T t);
}

为什么会有显式可为空的注解?

LiveData.observe() 的文档还说:

If LiveData already has data set, it will be delivered to the observer.

例如观察者等待不可为空的更新或立即接收以前的不可为空值,尤其是在 Kotlin 中,直到我将 T 定义为可空。

代码似乎是这样工作的。我理解为什么这不适用于 LiveData.getValue(),它可以在第一个数据传递之前手动调用(因此检查 mData != NOT_SET 是否返回一个空值)。

所以第二个问题是:当 T 不可为空时,在 Kotlin 中假设该值不为空是否安全?

最佳答案

  1. 我认为他们将其设为 Nullable 的事实是,他们希望通过将 liveData 的值设为空来为那些想要reset liveData 的人添加功能。也有人可能想要一个可为空的 LiveData(并在观察中使用该空值)。

  2. 如果您正在创建/生成 LiveData,您可以假设它为 null(并使用 !! 运算符),因为 null 表示意外错误。你也可以创建一个类,比如 NonNullLiveData,它会忽略它的 setValue 中的 null 值。这样你就可以确保你永远不会在你的观察中收到空值(尽管你不能让 @Nullable 远离观察者)。

关于android - 为什么 Android Architecture Components 的 Observer 中的 value 参数可以为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50292394/

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