Java 如何在kotlin中将类强制转换为((Int,String)->;单位)
在Kotlin中,我可以在类Java 如何在kotlin中将类强制转换为((Int,String)->;单位),java,android,kotlin,Java,Android,Kotlin,在Kotlin中,我可以在类(Int,String)->Unit中实现这个可调用的((Int,String)->Unit) 没有写接口,但我需要从另一个类将对象强制转换为这个可调用类型 它的高阶函数或作为参数的函数和用于铸造的关键字“is”用于检查实例,“as”用于直接铸造 您的适配器如下所示: CommonListAdapter(val mList: MutableList<Any>, val onClick: (item: Any) ->
(Int,String)->Unit中实现这个可调用的((Int,String)->Unit)
没有写接口,但我需要从另一个类将对象强制转换为这个可调用类型
它的高阶函数或作为参数的函数和用于铸造的关键字“is”用于检查实例,“as”用于直接铸造
您的适配器如下所示:
CommonListAdapter(val mList: MutableList<Any>,
val onClick: (item: Any) -> Unit) : RecyclerView.Adapter<RecyclerView.ViewHolder>()
使用以下链接了解更多详细信息
您忘记了要强制转换到的函数类型中的返回值。您可能应该执行安全强制转换,以便在出现错误时提供适当的错误消息以便于调试
(context as? (Int, MenuItem) -> Unit)?.invoke(position - 1, menuItem)
?: error("Failed to pass Activity with appropriate invoke function")
这只是我的观点,但我认为为了代码的清晰性,接口是比实现函数类型更好的选择。在您的代码片段中,您已经匿名实现了一个OnClickListener
。您不需要实现可调用的接口。您可以有一个名为foo
的函数,并在您的转换位置执行context.foo(…)
。感谢您的回答。请您解释一下为什么您喜欢界面而不是这种类型的实现,主要是因为您的函数可以有一个有意义的名称。但是,您也可以使用具有不同名称的函数实现多个接口,否则这些函数将具有相同的签名。当您在没有接口的情况下执行时,您只能使用一个允许的实现。
(context as? (Int, MenuItem) -> Unit)?.invoke(position - 1, menuItem)
?: error("Failed to pass Activity with appropriate invoke function")