我的代码中有以下代码 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
界面有
void onChanged (T t)
https://developer.android.com/reference/android/arch/lifecycle/Observer.html
如何
Observer { user: User? ->
}
导致一个带有的对象 onChanged
方法?
我不知道将接口名称放在lambda表达式前面是什么意思。
谢谢!
这就是所谓的 SAM转换,一个有助于与Java交互的概念 单一抽象方法 接口类似于您的示例。
以下创建了一个实现 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()
这就是所谓的 SAM转换,一个有助于与Java交互的概念 单一抽象方法 接口类似于您的示例。
以下创建了一个实现 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()