Kotlin-43.Java调用kotlin之一(Call Kotlin from Java)
来源:互联网 发布:我的世界fps优化 编辑:程序博客网 时间:2024/06/04 17:59
官方文档: http://kotlinlang.org/docs/reference/java-to-kotlin-interop.html
1.kotlin属性(Properties)
Kotlin属性会被编译成以下Java元素: 1.getter方法,名称是在kotlin属性名前加get并且属性名首字母大写; 2.setter方法(只适用于var属性),名称是在kotlin属性名前加set并且属性名首字母大写; 3.private私有字段,名称与kotlin属性同名(只适用于具有幕后字段[backing field]的属性) 如果kotlin属性名以is开头,则java名称映射规则不同: getter名与属性名相同,setter名是将is替换为set; 提示: 这一规则适用于任何类型的属性,不仅限于Boolean示例1: // kotlin代码: var firstName: String // Kotlin属性 // 对应的Java代码: // java私有字段 private String firstName; // getter方法 public String getFirstName() { return firstName; } // setter方法 public void setFirstName(String firstName) { this.firstName = firstName; }示例2: // kotlin代码: var isOpen: Boolean // Kotlin属性 // 对应的Java代码: private Boolean isOpen; // java私有字段 // getter方法 public Boolean isOpen() { return firstName; } // setter方法 public void setOpen(Boolean isOpen) { this.isOpen = isOpen; }
2.kotlin包级函数(Package-Level Functions)
1.在demo包内的example.kt文件中声明的所有函数和属性(包括扩展函数),都被编译成一个名为demo.ExampleKt的Java类的静态方法: // kotlin代码(example.kt文件) package demo class Foo fun bar() { } // Java调用kotlin new demo.Foo(); demo.ExampleKt.bar(); // 把example.kt大写变成ExampleKt类2.可以使用@JvmName注解修改生成的Java类名: // kotlin代码(example.kt文件) @file:JvmName("DemoUtils") package demo class Foo fun bar() { } // Java调用kotlin new demo.Foo(); demo.DemoUtils.bar();3.如果多个不同文件的包名相同且@JvmName注解相同,可用@JvmMultifileClass注解,编译器能够生成一个单一Java外观类 // kotlin代码(oldutils.kt文件) @file:JvmName("Utils") @file:JvmMultifileClass package demo fun foo() { } // kotlin代码(newutils.kt文件) @file:JvmName("Utils") @file:JvmMultifileClass package demo fun bar() { } // Java调用kotlin demo.Utils.foo(); demo.Utils.bar();
3.实例对象字段(Instance Field)
在Java中将Kotlin属性作为字段暴露,需要用@JvmField注解标注,该字段的可见性与底层属性相同;如果kotlin属性有幕后字段(backing field),且没有private/open/override/const修饰符,且不是委托属性;那么可以用@JvmField注解该kotlin属性! // kotlin class C(id: String) { @JvmField val ID = id } // Java class JavaClient { public String getID(C c) { return c.ID; } }延迟初始化(Late-Initialized)属性在Java中也会暴露为字段,该字段的可见性与lateinit属性setter相同!
简书:http://www.jianshu.com/p/1cf85aa9fcfc
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/75268938
GitHub博客:http://lioil.win/2017/07/17/Kotlin-kotlinInJava.html
Coding博客:http://c.lioil.win/2017/07/17/Kotlin-kotlinInJava.html
阅读全文
0 0
- Kotlin-43.Java调用kotlin之一(Call Kotlin from Java)
- Kotlin-39.kotlin调用Java之一(Call Java from Kotlin)
- Kotlin-40.kotlin调用Java之二(Call Java from Kotlin)
- Kotlin-41.kotlin调用Java之三(Call Java from Kotlin)
- Kotlin-42.kotlin调用Java之四(Call Java from Kotlin)
- Kotlin-44.Java调用kotlin之二(Call Kotlin from Java)
- Kotlin-45.Java调用kotlin之三(Call Kotlin from Java)
- Kotlin-47.Kotlin调用JavaScript(Call JavaScript from Kotlin)
- Kotlin-48.JavaScript调用Kotlin(Call Kotlin from JavaScript)
- Kotlin-Kotlin中调用Java
- Kotlin-Java中调用Kotlin
- From Java To Kotlin
- Java?Kotlin?Kotlin!
- Java?Kotlin?Kotlin!
- kotlin调用java
- java调用kotlin注意事项
- kotlin汇总10-Java调用kotlin
- Kotlin基础教程-在kotlin中调用Java
- 在 Mac 下为 PyCharm 添加 IdeaVim 插件
- 玲珑学院 1143 计算几何你瞎暴力【计算几何】【技巧暴力】
- python13面向对象编程
- 本蒟蒻简介
- VLC -- 使用VLC串流播放视频
- Kotlin-43.Java调用kotlin之一(Call Kotlin from Java)
- 数据结构复习-选择排序
- 【HTML5学习笔记】24:CSS背景
- VS2015动态库编程之导出位图资源
- HTML入门笔记6-pre和hr标签
- 开源虹膜识别软件OSIRIS4.1的使用入门
- HDU 1003子序列最大和
- Android 自定义内容提供者+访问者
- hadoop错误,重新格式化namenode后,出现java.io.IOException Incompatible clusterIDs