Android 初始化接口数组时转换为lambda

Android 初始化接口数组时转换为lambda,android,lambda,kotlin,Android,Lambda,Kotlin,我想将过滤器设置为编辑文本视图 view.findViewById<EditText>(R.id.some_edit_text).filters = arrayOf(object : InputFilter { override fun filter(source: CharSequence?, start: Int, end: Int,

我想将过滤器设置为编辑文本视图

view.findViewById<EditText>(R.id.some_edit_text).filters = arrayOf(object : InputFilter {
        override fun filter(source: CharSequence?,
                            start: Int,
                            end: Int,
                            dest: Spanned?,
                            dstart: Int,
                            dend: Int): CharSequence {
            // TODO: Do something
            return "";
        }
    })

例如,我知道如何使用lambda表达式来设置单击侦听器,但如何提供一个元素数组,并用lambda表达式实现接口?

单方法对象实际上不需要显式声明方法的名称,因为只有一个。通常,如果您有一个带有单个方法的接口,则可以转换,即:

object : SomeInterface {
    override fun someMethod(){
        TODO("Something");
    }
}
更简单的是:

SomeInterface { 
    TODO("Something");
}
如果存在参数,请添加如下参数:

SomeInterface { x, y, z ->

}
但是,由于存在漏洞,这对于Kotlin中定义的接口是不可能的。如果您对Kotlin中的接口尝试此操作,它将无法编译

您的接口是用Java定义的,这意味着您可以:

view.findViewById<EditText>(R.id.some_edit_text).filters = arrayOf(InputFilter { source, start, end, dest, dstart, dend ->
    // TODO: Do something
    "";
})
view.findViewById(R.id.some_edit_text)。filters=arrayOf(InputFilter{source,start,end,dest,dstart,dend->
//托多:做点什么
"";
})
此外,每当您在IntelliJ或Android Studio中获得任何类型的建议时,Alt+Enter和默认键绑定都会显示解决方案的建议


单击enter将自动转换它,如果单击向右箭头,您将获得更多选项(包括修复文件中的所有相关问题,抑制文件)。这也适用于错误(尽管并非所有错误都有自动修复)、警告和其他建议

view.findViewById(R.id.some_edit_text)。filters=arrayOf(InputFilter{source,start,end,dest,dstart,dend->{//TODO:Do something”“}})
这就是你要找的吗?你可以按Alt+Enter让Android Studio为你自动转换大多数lambda,仅供参考
view.findViewById<EditText>(R.id.some_edit_text).filters = arrayOf(InputFilter { source, start, end, dest, dstart, dend ->
    // TODO: Do something
    "";
})