什么是语法对象:Kotlin中的接口?

时间:2019-10-11 04:13:51

标签: android kotlin

我是KotlinAndroid的新手。

我在使用TextWatcher时看到语法时感到困惑:

editTextSample.addTextChangedListener(object : TextWatcher{
    override fun afterTextChanged(s: Editable) {}

    override fun beforeTextChanged(s: CharSequence, start: Int,
                                   count: Int, after: Int) {
    }

    override fun onTextChanged(s: CharSequence, start: Int,
                               before: Int, count: Int) {
        txtView1.setText("Text in EditText : "+s)
    }
})

你能为我解释一下吗?谢谢

2 个答案:

答案 0 :(得分:1)

EditText类扩展了TextView类,该类包含名为addTextChangedListener()的方法。

在这里,您正在创建EditText类的对象并调用该方法。您需要在哪里传递TextWatcher接口的对象作为参数。

[保留..但是我们无法创建接口的对象。所以我们在这里                 为此,使用了匿名类的概念check this]。

,并且由于接口包含三个方法,因此我们必须全部覆盖它们。就是这样。

答案 1 :(得分:1)

符号object : TextWatcher只是在这里创建一个匿名类。这只是Kotlin的创建方式。 Kotlin为您提供了更多实现TextWatchers的方法。

您可以导入androidx.core:core-ktx依赖项,该依赖项提供了许多不错的功能。其中之一是针对textwatcher的扩展。使用此功能,您可以将代码简化为:

        editTExt.doOnTextChanged { text, start, count, after -> 
            //Do something here
        }