gpt4 book ai didi

android - 初始化接口(interface)数组时转换为lambda

转载 作者:太空宇宙 更新时间:2023-11-03 12:44:07 24 4
gpt4 key购买 nike

我想为编辑 TextView 设置过滤器。

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 "";
}
})

无论如何,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.

我知道如何使用 lambda 表达式来设置点击监听器,但我如何提供单个元素数组来实现带有 lambda 表达式的接口(interface)?

最佳答案

单方法对象实际上不需要显式声明方法的名称,因为只有一个。一般来说,如果你有一个只有一个方法的接口(interface),你可以转换,即:

object : SomeInterface {
override fun someMethod(){
TODO("Something");
}
}

更简单:

SomeInterface { 
TODO("Something");
}

如果有参数,你可以这样添加:

SomeInterface { x, y, z ->

}

但是,由于 bug这对于在 Kotlin 中定义的接口(interface)是不可能的。如果您对 Kotlin 中的接口(interface)尝试这样做,它不会编译。

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

view.findViewById<EditText>(R.id.some_edit_text).filters = arrayOf(InputFilter { source, start, end, dest, dstart, dend ->
// TODO: Do something
"";
})

此外,每当您在 IntelliJ 或 Android Studio 中收到任何类型的建议时,使用默认键绑定(bind)的 Alt+Enter 都会向您显示解决方案建议。

enter image description here

点击回车会自动转换,点击右箭头会得到更多选项(包括修复文件中所有相关问题,压制)。这也适用于错误(尽管并非所有错误都有自动修复)、警告和其他建议。

关于android - 初始化接口(interface)数组时转换为lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52671660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com