kotlin语法--->fun interface 函数式接口(使kotlin符合SAM转换)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了kotlin语法--->fun interface 函数式接口(使kotlin符合SAM转换),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1720字,纯文字阅读大概需要3分钟。
内容图文
-
kotlin语法--->fun interface 函数式接口(使kotlin也符合SAM(single abstract method)转换)
问题出处Compose中的layout函数,在进行自定义layout时,它的第三个参数也可以使用尾随的lambda语法来写,当时感觉比较疑惑.因为kotlin在调用java中的函数式接口是可以使用lambda语法来简写的。
但是kotlin调用自身的”函数式接口“时会出现编译时错误。下面是一个例子.
fun setMyListener(listener: MyListener) { listener.onCheckdChange("name","zyt") } interface MyListener { fun onCheckedChanged(param1: String, param2: String) } fun mian(){ // 当我们通过SAM转译调用时,会出现错误 setMyListener { a, b -> print("param1:$a,param2:$b") // Compile time error } }
在我们调用java中的函数式接口时,kotlin是可以使用lambda来进行简写的。如下
// Test.java public interface Test { void onChanged(); } //.kt fun main(){ setTest{ // 这里并不会出现问题 println("onChanged") } } fun setTest(test: Test) { test.onChanged() }
可以理解为kotlin兼容java的SAM转换.但是也有解决办法,如下。
解决方法1:类似于java中的匿名内部类
setMyListener(object : MyListener{ override fun onCheckdChange(param1: String, param2: String) { TODO("Not yet implemented") } })
解决方法2:先看一下我当时遇到的疑惑,如下图1。因为根据我前面的知识来理解,是不可使用尾随lambda来进行简写的,我觉得编辑器应该报错啊。
图1但是图2并没有报错。
图2我接着点进MeasurePolicy进入看,一开始没有注意到interface前有一个fun修饰符,
// MeasurePolicy.kt @Stable fun interface MeasurePolicy { // 就这一个抽象方法(没有函数体) fun MeasureScope.measure( measurables: List<Measurable>, constraints: Constraints ): MeasureResult 。。。。。。 }
接下来我试了一下,如下
fun setMyListener(listener: MyListener) { listener.onCheckdChange("name","zyt") } fun interface MyListener { // fun interface 我的理解就是函数式接口,这里必须包含一个抽象方法(也就是没有函数体),没有抽象方法编译不通过 fun onCheckdChange(param1: String, param2: String) } // 那么接下来就可以使用lambda来进行调用了(kotlin自身也符合SAM转换了) setMyListener { a, b -> println("param1:$a,param2:$b") }
函数式接口(使kotlin符合SAM转换)' ref='nofollow'>kotlin语法--->fun interface 函数式接口(使kotlin符合SAM转换)
原文:https://www.cnblogs.com/sowhappy/p/15153944.html
内容总结
以上是互联网集市为您收集整理的kotlin语法--->fun interface 函数式接口(使kotlin符合SAM转换)全部内容,希望文章能够帮你解决kotlin语法--->fun interface 函数式接口(使kotlin符合SAM转换)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。