Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在kotlin中将类强制转换为((Int,String)->;单位)_Java_Android_Kotlin - Fatal编程技术网

Java 如何在kotlin中将类强制转换为((Int,String)->;单位)

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) ->

在Kotlin中,我可以在类
(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")