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()