我在我的代码中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? ->
});
}
Run Code Online (Sandbox Code Playgroud)
虽然这似乎有效,但以下部分是什么意思?
Observer { user: User? ->
}
Run Code Online (Sandbox Code Playgroud)
这必须导致一个符合Observer接口的对象
void onChanged (T t)
Run Code Online (Sandbox Code Playgroud)
https://developer.android.com/reference/android/arch/lifecycle/Observer.html
如何
Observer { user: User? ->
}
Run Code Online (Sandbox Code Playgroud)
导致一个onChanged方法的对象?
我不知道将接口名称放在lambda表达式前面是什么意思.
谢谢!
s1m*_*nw1 17
这称为SAM转换,这个概念有助于与您的示例中的Java 单一抽象方法接口进行交互.
以下创建了一个实现Runnable,其中单个抽象方法是run():
val runnable = Runnable { println("This runs in a runnable") }
Run Code Online (Sandbox Code Playgroud)
它在文档中描述:https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
或者,但更冗长,将使用object:
val runnable2 = object : Runnable {
override fun run() {
println("This runs in a runnable")
}
}
Run Code Online (Sandbox Code Playgroud)
两者都是匿名实现的例子interface.当然也可以创建一个具体的子类并然后实例化它.
class MyRunnable : Runnable {
override fun run() {
println("This runs in a runnable")
}
}
val runnable3 = MyRunnable()
Run Code Online (Sandbox Code Playgroud)
在 Kotlin 中,Observer { }lambda 为您提供 param it,您可以根据需要重命名并使用。默认情况下,数据将可用it.something()等...
爪哇:
... new Observer {
void onChanged(User user){
user.something()
}
}
Run Code Online (Sandbox Code Playgroud)
科特林
... object : Observer<User> {
fun onChanged(user: User){
user.something()
}
}
Run Code Online (Sandbox Code Playgroud)
或者
... Observer {
it.something()
}
Run Code Online (Sandbox Code Playgroud)
您可以将其重命名为您想要的任何名称
... Observer { myUser ->
myUser.something()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10555 次 |
| 最近记录: |