首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用kotlin观察liveData时,为什么不使用onChanged方法

在使用kotlin观察liveData时,为什么不使用onChanged方法
EN

Stack Overflow用户
提问于 2019-10-27 16:17:14
回答 1查看 214关注 0票数 0

我是科特林新来的。在java中,为了观察LiveData,我们执行如下操作:

代码语言:javascript
复制
    final Observer<String> nameObserver = new Observer<String>() {
        @Override
        public void onChanged(@Nullable final String newName) {
        // do some work;
        }
    };

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

但在科特林

代码语言:javascript
复制
val nameObserver = Observer<String> { newName ->
    // do some work
    }

model.currentName.observe(this, nameObserver)

那么,我的困惑是重写方法onChanged在科特林哪里去了?我们为什么不写呢?

此外,在java中,观察者是在

新观察员()

但在科特林

观察者

我知道我不需要使用新关键字。但是家长()呢?为什么不在科特林用呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-27 16:30:12

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

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

萨姆变换

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

代码语言:javascript
复制
object : Observer<T> {

}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58581171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档