Jas*_*ulo 3 lambda android kotlin
我想将过滤器设置为编辑文本视图。
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 "";
}
})
Run Code Online (Sandbox Code Playgroud)
无论如何,Android Studio会向我显示以下对象警告/建议:InputFilter。
Convert to Lambda
This inspection reports an anonymous object literal implementing a Java interface with a single abstract method that can be converted into a call with a lambda expression.
Run Code Online (Sandbox Code Playgroud)
我知道如何使用lambda表达式例如在点击侦听器上进行设置,但是如何通过lambda表达式实现接口来提供单个元素数组?
单方法对象实际上不需要显式声明方法的名称,因为只有一个。通常,如果您的接口具有单个方法,则可以进行以下转换:
object : SomeInterface {
override fun someMethod(){
TODO("Something");
}
}
Run Code Online (Sandbox Code Playgroud)
简单一点:
SomeInterface {
TODO("Something");
}
Run Code Online (Sandbox Code Playgroud)
如果有参数,则添加如下所示的参数:
SomeInterface { x, y, z ->
}
Run Code Online (Sandbox Code Playgroud)
但是,由于存在错误,Kotlin中定义的接口无法实现。如果您在Kotlin中尝试使用此接口,它将无法编译。
您的接口是用Java定义的,这意味着您可以执行以下操作:
view.findViewById<EditText>(R.id.some_edit_text).filters = arrayOf(InputFilter { source, start, end, dest, dstart, dend ->
// TODO: Do something
"";
})
Run Code Online (Sandbox Code Playgroud)
另外,只要您在IntelliJ或Android Studio中获得任何建议,带有默认键绑定的Alt+都会Enter向您显示解决方案的建议。
单击Enter将自动进行转换,如果单击向右箭头,则会获得更多选项(包括修复文件中的所有相关问题,取消显示)。这也适用于错误(尽管并非所有人都可以自动修复),警告和其他建议。
| 归档时间: |
|
| 查看次数: |
323 次 |
| 最近记录: |