Kotlin代码与Java代码完全兼容。 Java代码在Kotlin代码中轻松调用,Kotlin代码也可以通过Java代码的正常方式调用。
从Kotlin调用Java代码
从Kotlin文件调用Java void方法
从Kotlin调用返回类型为void的java代码时,它在Kotlin文件中返回Unit。 如果想要返回一个值,它将由Kotlin编译器分配给Kotlin文件并返回Unit。 例如:
代码文件:MyKotlinFile.kt
fun main(args: Array) {
val sum= MyJavaClass.add(5, 10)
println("printing sum inside Kotlin file: "+sum)
}
代码文件:MyJavaClass.java
public class MyJavaClass {
public static void main(String[] args){
}
public static void add(int a,int b){
int result = a + b;
System.out.println("printing inside Java class :"+result);
}
}
运行代码:MyKotlinFile.kt ,得到以下结果 -
printing inside Java class :15
printing sum inside Kotlin file: kotlin.Unit
从Kotlin文件调用Java int方法
在从Kotlin文件调用int类型或其他(而不是void)的java代码时,它返回相同类型的结果。 例如,从Kotlin文件调用Java类的area()方法会返回int类型的结果。
代码文件:MyKotlinFile.kt
fun main(args: Array) {
val area: Int = MyJavaClass.area(3, 4)
println("printing area from java insideKotlin file: "+area)
}
代码文件:MyJavaClass.java
public class MyJavaClass {
public static void main(String[] args){
}
public static int area(int a, int b){
int result = a * b;
return result;
}
}
运行代码:MyKotlinFile.kt ,得到以下结果 -
printing area from java insideKotlin file: 12
Kotlin调用包内的Java类
如果想要从Kotlin文件调用存在于不同包中的Java代码,则需要在Kotlin文件中使用Java类导入包名。
例如,一个Java类MyJavaClass.java存在于一个包myjavapackage中,一个Kotlin文件MyKotlinFile.kt存在于mykotlinpackage包中。 在这种情况下,从Kotlin文件调用Java代码需要在Kotlin文件中导入myjavapackage.MyJavaClass包。
代码文件:MyKotlinFile.kt
package mykotlinpackage
import myjavapackage.MyJavaClass
fun main(args: Array) {
val area: Int = MyJavaClass.area(3, 6)
println("printing area from java insideKotlin file: "+area)
}
代码文件:MyJavaClass.java
package myjavapackage;
public class MyJavaClass {
public static void main(String[] args){
}
public static int area(int a, int b){
int result = a * b;
return result;
}
}
运行代码:MyKotlinFile.kt ,得到以下结果 -
printing area from java insideKotlin file: 18
Kotlin代码访问Java getter和setter
由于Kotlin与Java完全互操作,在Kotlin可以访问Java类(或POJO类)的getter和setter方法。例如,在Java类MyJava.java中创建一个getter和setter方法,用于设置和读取firstName和lastName属性。 从Kotlin文件通过使用MyJava.java类来创建对象,在MyKotlin.kt访问这些属性。
文件:MyJava.java -
public class MyJava{
protected String firstName;
protected String lastName;
public String getfirstName() {
return firstName;
}
public void setfirstName(String firstName) {
this.firstName = firstName;
}
public String getlastName() {
return lastName;
}
public void setlastName(String lastName) {
this.lastName = lastName;
}
}
文件:MyKotlin.kt -
fun main(args: Array) {
val myJava = MyJava()
myJava.lastName = "Max"
myJava.setfirstName("Su")
println("使用属性访问值: "+myJava.firstName)
println("使用属性访问值: "+myJava.lastName)
println("------------------------------------")
println("使用方法访问值: "+myJava.getfirstName())
println("使用方法访问值: "+myJava.getlastName())
}
运行代码:MyKotlin.kt ,得到以下结果 -
使用属性访问值: Su
使用属性访问值: Max
------------------------------------
使用方法访问值: Su
使用方法访问值: Max
Kotlin代码访问Java数组
可以简单地调用Java类方法,该方法将数组作为Kotlin文件中的参数。 例如,创建方法sumValue(),它将数组元素作为Java类MyJava.java中的参数计算加法并返回结果。 通过将数组作为参数传递,从Kotlin文件MyKotlin.kt调用此方法。
文件:MyJava.java -
public class MyJava {
public int sumValues(int[] nums) {
int result = 0;
for (int x:nums) {
result+=x;
}
return result;
}
}
文件:MyKotlin.kt -
fun main(args: Array){
val myJava = MyJava()
val numArray = intArrayOf(1, 2, 3,4,5)
val sum = myJava.sumValues(numArray)
println("数组元素总和:"+sum)
}
运行代码:MyKotlin.kt ,得到以下结果 -
数组元素总和:15
Kotlin代码访问Java可变参数
在Java可变参数函数中,可以将任意数量的参数传递给方法。 Java可变参数使用省略号定义,即数据类型后的三个点(...)。
使用可变参数(varargs)时,应注意以下几点:
方法中只有一个可变参数(varargs)。
可变参数(varargs)必须是最后一个参数。
在从Kotlin访问Java可变参数(varargs)时,需要使用运算符*来传递数组。
下面来看看一个从Kotlin文件调用Java方法使用int类型可变参数(varargs)的示例。
public class MyJava {
public void display(int... values) {
for (int s : values) {
System.out.println(s);
}
}
}
文件:MyKotlin.kt -
fun main(args: Array){
val myJava = MyJava()
val array = intArrayOf(0, 1, 2, 3)
myJava.display(*array)
}
运行代码:MyKotlin.kt ,得到以下结果 -
0
1
2
3
让我们来看另一个例子,它在Java方法中使用两个参数作为String类型的参数,并从Kotlin文件调用的int类型可变参数(varargs)。
文件:MyJava.java -
public class MyJava {
public void display(String message,int... values) {
System.out.println("string is " + message);
for (int s : values) {
System.out.println(s);
}
}
}
文件:MyKotlin.kt -
fun main(args: Array){
val myJava = MyJava()
val array = intArrayOf(0, 1, 2, 3)
myJava.display("hello",*array)
}
运行代码:MyKotlin.kt ,得到以下结果 -
string is hello
0
1
2
3
Kotlin和Java映射类型
Kotlin和Java类型的映射方式不同,但它们都能映射到相应的类型。 这些类型的映射仅在编译时才有意义,运行时保持不变。
Java的原始类型对应的Kotlin类型
Java类型
Kotlin类型
byte
kotlin.Byte
short
kotlin.Short
int
kotlin.Int
long
kotlin.Long
char
kotlin.Char
double
kotlin.Double
boolean
kotlin.Boolean
Java非原始类型对应的Kotlin类型
Java类型
Kotlin类型
java.lang.Object
kotlin.Any!
java.lang.Cloneable
kotlin.Cloneable!
java.lang.Comparable
kotlin.Comparable!
java.lang.Enum
kotlin.Enum!
java.lang.Annotation
kotlin.Annotation!
java.lang.Deprecated
kotlin.Deprecated!
java.lang.CharSequence
kotlin.CharSequence!
java.lang.String
kotlin.String!
java.lang.Number
kotlin.Number!
java.lang.Throwable
kotlin.Throwable!
Java盒装原始类型和相应的可空Kotlin类型
Java类型
Kotlin类型
java.lang.Byte
kotlin.Byte?
java.lang.Short
kotlin.Short?
java.lang.Integer
kotlin.Int?
java.lang.Long
kotlin.Long?
java.lang.Character
kotlin.Char?
java.lang.Float
kotlin.Float?
java.lang.Double
kotlin.Double?
java.lang.Boolean
kotlin.Boolean?
Java集合类型和相应的只读或可变Kotlin类型
Java类型
Kotlin只读类型
Kotlin可变类型
Iterator
Iterator
MutableIterator
Iterable
Iterable
MutableIterable
Collection
Collection
MutableCollection
Set
MutableSet
MutableSet
List
MutableList
MutableList
ListIterator
ListIterator
MutableListIterator
Map
Map
MutableMap
Map.Entry
Map.Entry
MutableMap.MutableEntry
¥ 我要打赏
纠错/补充
收藏
加QQ群啦,易百教程官方技术学习群
注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。