【问题标题】:when observing liveData using kotlin why dont we use the onChanged method使用 kotlin 观察 liveData 时为什么不使用 onChange 方法
【发布时间】:2019-10-28 00:30:12
【问题描述】:

我是 kotlin 的新手。在 java 中观察 LiveData 我们执行如下操作:

    final Observer<String> nameObserver = new Observer<String>() {
        @Override
        public void onChanged(@Nullable final String newName) {
        // do some work;
        }
    };

model.getCurrentName().observe(this, nameObserver);

但是在 kotlin 中

val nameObserver = Observer<String> { newName ->
    // do some work
    }

model.currentName.observe(this, nameObserver)

那么,我的困惑是,在 kotlin 中,覆盖方法 onChanged 去了哪里?为什么不写呢?

另外,在 java 中 Observer 是用

启动的

新的观察者()

但在 kotlin 中它的

观察者

我知道我不需要使用 new 关键字。但是括号 () 呢?为什么在 kotlin 中不用呢?

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    简而言之,由于SAM(单一抽象方法)转换,您可以在Kotlin中编写Observer { }。如果您在 Java interface 中有一个抽象方法,您可以将其转换为 lambda 表达式。这提供了更具可读性的代码,onChanged 方法仍然存在,但在后台工作。

    就像 Java 8 一样,Kotlin 支持 SAM 转换。这意味着,只要接口方法的参数类型与 Kotlin 函数的参数类型匹配,Kotlin 函数字面量就可以自动转换为具有单个非默认方法的 Java 接口实现。

    SAM conversions

    要创建匿名类,您使用 new 关键字,而在 Kotlin 中您使用 object: 关键字。

    object : Observer<T> {
    
    }
    

    【讨论】:

    猜你喜欢
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多