Синтаксис Kotlin для наблюдателя LiveData?

У меня есть следующий код кода в моей 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 ?

Я не знаю, что означает имя интерфейса перед выражением лямбда.

Благодаря!

Это называется SAM Conversion , концепция, которая помогает взаимодействовать с Java Single Abstract Method Interfaces, как в вашем примере.

Ниже приведена реализация 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()