我是科特林新来的。在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);但在科特林
val nameObserver = Observer<String> { newName ->
// do some work
}
model.currentName.observe(this, nameObserver)那么,我的困惑是重写方法onChanged在科特林哪里去了?我们为什么不写呢?
此外,在java中,观察者是在
新观察员()
但在科特林
观察者
我知道我不需要使用新关键字。但是家长()呢?为什么不在科特林用呢?
发布于 2019-10-27 16:30:12
简而言之,由于SAM(单抽象方法)转换,您可以用Kotlin编写Observer { }。如果Java interface中有一个抽象方法,则可以将其转换为lambda表达式。这提供了更多可读的代码,onChanged方法仍然存在,但在幕后工作。
就像Java 8一样,Kotlin支持SAM转换。这意味着,只要接口方法的参数类型与Kotlin函数的参数类型匹配,Kotlin函数文本就可以自动转换为具有单个非默认方法的Java接口的实现。
要创建匿名类,可以使用new关键字,而在Kotlin中则使用object:关键字。
object : Observer<T> {
}https://stackoverflow.com/questions/58581171
复制相似问题