gpt4 book ai didi

android - LiveData 观察者的 Kotlin 语法?

转载 作者:IT老高 更新时间:2023-10-28 13:30:17 25 4
gpt4 key购买 nike

我的 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/

25 4 0