无法在Kotlin中将lambda箭头表达式用于Livedata观察方法

Adi*_*kar 6 android kotlin

我是Kotlin的新手,在LiveData观察方法中使用lambda表达式时感到有些困惑。

观察方法的签名如下

observe(LifecycleOwner owner, Observer<? super T> observer)
Run Code Online (Sandbox Code Playgroud)

其中Observer是具有单个方法的接口

void onChanged (T t)
Run Code Online (Sandbox Code Playgroud)

但是,按以下方式在kotlin中调用上述obtain方法会产生类型不匹配错误:

 val myViewModel = ViewModelProviders.of(this).get(AnimeListViewModel::class.java)

 myViewModel.animes.observe(this, { anime -> println(anime) })
Run Code Online (Sandbox Code Playgroud)

这与在视图上调用setOnClickListener不同吗?以下代码段完美运行,没有任何编译错误:

val myView = View(this)

myView.setOnClickListener { view -> println(view) }
Run Code Online (Sandbox Code Playgroud)

我已经阅读了这个答案,答案显示了如何使用lambda表达式(使用SAM转换)调用该方法。但是,我仍然不确定为什么简单的箭头表达式会失败。

No *_*eto 0

kotlin上解决泛型存在一些问题,所以就是这个原因。Kotlin 一直致力于此,您可以 在这里找到完整的解释。