LiveData观察者的Kotlin语法?

我在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方法的对象?

我不知道是什么把一个接口的名称放在lambdaexpression式的前面。

谢谢!

这就是所谓的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()