Kotlin 和 Java 互操作 (上)
前言
浅谈 Kotlin 与 Java 互操作 (上)
Kotlin is 100% interoperable with Java and Android
Kotlin 官网的一句标语,其旨意是表达 kotlin 的Interoperable-互操作特性
互操作就表示 Kotlin 中可以调用 Java 的开放接口来访问成员属性和成员方法,同时在 Java 代码中也百分百兼容 Kotlin 代码,本篇就来探讨一下 Kotlin 调用 Java。
文章概览
调用 Java Static 成员
在 Java 中,静态成员在编译时会生成该类的伴生对象,因此在 Kotlin 中可以直接以显示的方式访问 Java 中的静态成员。接下来我们通过一个案例来演示在 Kotlin 中访问 Java 中的静态成员。
- 创建 JavaStatic.java 创建一个 JavaStatic.java 文件,并在该文件中创建一个静态成员变量 name,与一个静态方法 sayHello(),具体代码如下所示。
public class JavaStatic {
public static String sName = “雷军”; //静态变量 name
public static void sayHello(String name) { //静态方法 sayHello()
System.out.println(name “: are you ok? Mifans.”);
}
}
在 Kotlin 代码中直接访问 JavaStatic 类中的静态成员变量和方法,如下代码:
fun main() {
JavaStatic.sayHello(JavaStatic.name) // 调用java中 静态方法和变量
}
运行结果:
雷军:are you ok? Mifans.
调用 Java 中 getter/setter
通常,在 Kotlin 中操作 Java 中的数据类属性时,编译器自动识别 data 类中属性的 getter 和 setter 方法,直接调用属性就可完成属性值的更改,看以下示例。
public class Person {
private String name;
public Student(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Person 类中包含一个属性 name,用于设置名字,并且同时创建 getName()和 setName()方法,分别用于获取和设置 Person 对象的 name 值。
fun main() {
val per = Person(“Any”)
per.name = “子不语Any” //直接对象名.属性名 设置值
println(per.name) //直接通过属性访问
per.setName(“AnyOne”) //调用setter方法
println(per.getName()) //调用getter方法
}
运行结果:
子不语Any
AnyOne
调用 Java 中注解 @NotNull
在 Java 中任何类型都可能是 Null,但在 Kotlin 中需要明确指定类型为空或者为非空,如果为非空时,传递 Null 时会报错。所以在 Kotlin 中调用 Java 代码可能会出现 空安全问题,有以下两种可取方案:
在调用对象的方法时可加上空安全调用符
在 Java 代码中,给方法指定的参数使用@NotNull注解,强制传入不为空的数据
创建一个 Person java 类,有两个字段,分别是 name 和 age。
public class Person {
private String name;
private int age;
public Person(@NotNull String name, int age) { //使用注解NotNull,设定name不能为null
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
在 Kotlin 中创建 Person 对象,同时访问它的属性。
fun main() {
var person = Person(“子不语”, 25)
println(person.name)
println(person.name?.length) // 用空安全调用符调用
}
运行结果:
子不语
3
如上述代码,Person 的构造方法中参数 name 前加了@NotNull注解,强制传递的 name 参数不为 Null,如果在赋值过程中传递 name 参数为 Null 时,编译器会报错。
方法返回 void / 转义特殊 Java 标识符
在 Java 中 返回值 void 可以不写,在 Kotlin 中 需使用 Unit
Java 中的有效标识符是 Kotlin 的关键字
foo.is(bar)
以上总结了在平时开发中常用的一些注意点,踩过的坑。更多的规则可以参看 Kotlin 官方文档上!
《Kotlin入门教程指南》
第一章 Kotlin 入门教程指南
● 前言
第二章 概述
● 使用 Kotlin 进行服务器端开发
● 使用 Kotlin 进行 Android 开发
● Kotlin JavaScript 概述
● Kotlin/Native 用于原生开发
● 用于异步编程等场景的协程
● Kotlin 1.1 的新特性
● Kotlin 1.2 的新特性
● Kotlin 1.3 的新特性
第三章 开始
● 基本语法
● 习惯用法
● 编码规范
第四章 基础
● 基本类型
● 包
● 控制流:if、when、for、while
● 返回和跳转
第五章 类与对象
● 类与继承
● 属性与字段
● 接口
● 可见性修饰符
● 扩展
● 数据类
● 密封类
● 泛型
● 嵌套类与内部类
● 枚举类
● 对象表达式与对象声明
● Inline classes
● 委托
委托属性
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhiafacb
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22