我的 HomeActivity
中有以下代码用于使用 LiveData
。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Show the launch splash screen.
//
this.setContentView(R.layout.activity_home)
this.viewModel = ViewModelProviders.of(this).get(HomeViewModel::class.java)
this.viewModel.getUser().observe(this, Observer { user: User? ->
});
}
虽然这似乎可行,但以下部分是什么意思?
Observer { user: User? ->
}
这必须产生一个符合 Observer
接口(interface)的对象,该接口(interface)具有
void onChanged (T t)
https://developer.android.com/reference/android/arch/lifecycle/Observer.html
如何
Observer { user: User? ->
}
产生一个带有 onChanged
方法的对象?
我不知道将接口(interface)名称放在 lambda 表达式前面是什么意思。
谢谢!
最佳答案
这称为 SAM 转换,这个概念有助于与 Java 单一抽象方法接口(interface)进行交互,就像您的示例中一样。
以下创建Runnable
的实现,其中单个抽象方法是run()
:
val runnable = Runnable { println("This runs in a runnable") }
文档中有描述:https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
另外一种更详细的方法是使用 object
:
val runnable2 = object : Runnable {
override fun run() {
println("This runs in a runnable")
}
}
两者都是该接口(interface)
的匿名实现示例。当然也可以创建一个具体的子类然后实例化它。
class MyRunnable : Runnable {
override fun run() {
println("This runs in a runnable")
}
}
val runnable3 = MyRunnable()
关于android - LiveData 观察者的 Kotlin 语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47604918/