LiveData观察者的Kotlin语法?

发布于 2021-01-30 22:46:19

我有以下代码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方法?

我不知道将接口名称放在lambda表达式前面意味着什么。

谢谢!

关注者
0
被浏览
636
1 个回答
  • 面试哥
    面试哥 2021-01-30
    为面试而生,有面试问题,就找面试哥。

    这称为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()
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看