Kotlin Extension Function
来源:互联网 发布:linux怎么退出输入模式 编辑:程序博客网 时间:2024/05/17 23:47
Extension Function
Extension Function是Kotlin中比较酷炫的功能,可以直接对已有类进行扩展,扩展的功能当做静态方法使用,而这个方法并不需要原来类的代码,并且这个类可以使任何基于JVM的语言。
Extension Function定义如下:
fun <T> Collection<T>.joinToString( separator: String, prefix: String, postfix: String): String{ val result = StringBuilder() result.append(prefix) for ((index, element) in withIndex()) { if (index > 0) result.append(separator) result.append(element) } result.append(postfix) return result.toString()}val list = listOf(1, 2, 3)println(list.joinToString(separate = "|")1;2;3
上面定义了将输入的Collection格式化为给定前后缀,间隔符的字符串。可以看出函数扩展了Collection类。
Extension function功能包含两部分:
- receiver type:类名
- receiver object:调用的值
上例中receiver type是Collection
,receiver object是list
变量。
Extension Function不允许override。
类名为Button
继承View
类,覆写了click()
方法。
fun Button.showOff() = println("Button showOff")class Button: View() { override fun click() = println("Button clicked")}
编译后的代码如下:
➜ chapter1 javap -c view.ButtonCompiled from "Button.kt"public final class view.Button extends view.View { public void click(); Code: 0: ldc #8 // String Button clicked 2: astore_1 3: getstatic #14 // Field java/lang/System.out:Ljava/io/PrintStream; 6: aload_1 7: invokevirtual #20 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V 10: return public view.Button(); Code: 0: aload_0 1: invokespecial #25 // Method view/View."<init>":()V 4: return}➜ chapter1 javap -c view.ButtonKtCompiled from "Button.kt"public final class view.ButtonKt { public static final void showOff(view.Button); Code: 0: aload_0 1: ldc #9 // String $receiver 3: invokestatic #15 // Method kotlin/jvm/internal/Intrinsics.checkParameterIsNotNull:(Ljava/lang/Object;Ljava/lang/String;)V 6: ldc #17 // String Button showOff 8: astore_1 9: getstatic #23 // Field java/lang/System.out:Ljava/io/PrintStream; 12: aload_1 13: invokevirtual #29 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V 16: return}
可见Button
变成了两个类!!!
而Extension Function方法showOff()
并不在Button.class里,而是在ButtonKt.class里。看来Kotlin对Extension Function方法进行了特殊处理。
阅读全文
0 0
- Kotlin Extension Function
- chrome extension js copy function
- Step into Kotlin - 18 - Extension 与 this
- 学习Kotlin笔记记录。--------function
- Kotlin学习笔记(5)-function
- Extension of Group by Function in MySQL
- a function to find the filename without extension
- extension
- Extension
- Extension
- Kotlin
- Kotlin
- Kotlin
- Kotlin
- kotlin
- kotlin
- Kotlin
- Kotlin
- iOS开发加载网页(webview)时的菊花(小圈)
- xv6 big file
- java自学方法论
- 如何让摄像机跟随你的角色,并且按鼠标右键围绕旋转
- Android5.0和6.0之后新增的控件说明
- Kotlin Extension Function
- linux ".XXXX.swp"
- 追梦的心岂会凋零
- 可能需要其他登录信息
- windows下eclipse编译报错:CreateProcess error=206
- 数据库分页存储过程
- 日志库EasyLogging++学习系列(11)—— 共享日志库
- python和django环境搭建,一直出现pytz模块找不到
- 设置圆角图片原来这么简单(CircleImageView)