本文概述
- 从Kotlin调用Java代码
- 包中存在Kotlin代码调用Java类
- Kotlin代码访问Java getter和setter
- Kotlin代码访问Java数组
- Kotlin代码访问Java Varargs
- Kotlin和Java映射类型
从Kotlin调用Java代码调用Java void方法表单Kotlin文件
从Kotlin调用其返回类型为void的Java代码时, 它将在Kotlin文件中返回Unit。如果有人想返回该值, 它将由Kotlin编译器分配给Kotlin文件并返回Unit。例如:
MyKotlinFile.kt
fun main(args: Array<
String>
) {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(inta, int b){int result = a + b;
System.out.println("printing inside Java class :"+result);
}}
输出:
printing inside Java class :15printing sum inside Kotlin file: kotlin.Unit
从Kotlin文件中调用Java int方法
从Kotlin文件中调用int类型或其他(而不是void)的Java代码时, 它以相同类型返回结果。例如, 从Kotlin文件中调用Java类的area()方法将返回int类型的结果。
MyKotlinFile.kt
fun main(args: Array<
String>
) {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 l, int b){int result = l * b;
return result;
}}
输出:
printing area from java insideKotlinfile: 12
包中存在Kotlin代码调用Java类如果我们想从不同的包中都存在的Kotlin文件中调用Java代码, 则需要使用Kotlin文件中的Java类导入包名称。
例如, Java类MyJavaClass.java存在于包myjavapackage中, 而Kotlin文件MyKotlinFile.kt存在于mykotlinpackage包中。在这种情况下, 从Kotlin文件中调用Java代码需要在Kotlin文件中导入myjavapackage.MyJavaClass。
MyKotlinFile.kt
package mykotlinpackageimport myjavapackage.MyJavaClassfun main(args: Array<
String>
) {val area: Int = MyJavaClass.area(3, 4)println("printing area from java inside Kotlin file: "+area)}
MyJavaClass.java
package myjavapackage;
public class MyJavaClass {public static void main(String[] args){}public static int area(int l, int b){int result = l * b;
return result;
}}
输出:
printing area from java inside Kotlin file: 12
Kotlin代码访问Java getter和setter由于Kotlin与Java具有完全的互操作性, 因此我们可以访问Java类(或POJO类)的getter和setter功能。例如, 在Java类MyJava.java中使用属性firstName和lastName创建一个getter和setter方法。可通过Kotlin文件中的MyJava.java的创建对象从Kotlin文件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<
String>
) {val myJava = MyJava()myJava.lastName = "Kumar"myJava.setfirstName("Arjun")println("accessing value using property: "+myJava.firstName)println("accessing value using property: "+myJava.lastName)println("accessing value using method: "+myJava.getfirstName())println("accessing value using method: "+myJava.getlastName())}
输出:
accessing value using property: Arjunaccessing value using property: Kumaraccessing value using method: Arjunaccessing value using method: Kumar
Kotlin代码访问Java数组我们可以简单地调用Java类方法, 该方法将数组作为Kotlin文件的参数。例如, 创建方法sumValue(), 该方法将数组元素作为Java类MyJava.java中的参数来计算加法并返回结果。通过将数组作为参数从Kotlin文件MyKotlin.kt中调用此方法。
MyJava.java
public class MyJava {public intsumValues(int[] nums) {int result = 0;
for (int x:nums) {result+=x;
}return result;
}}
MyKotlin.kt
fun main(args: Array<
String>
){val myJava = MyJava()val numArray = intArrayOf(1, 2, 3, 4, 5)val sum = myJava.sumValues(numArray)println(sum)}
输出:
sum of array element is 15
Kotlin代码访问Java Varargs在Java varags功能中, 我们可以将任意数量的参数传递给方法。 Java varargs参数是使用省略号定义的, 即数据类型后的三个点(… )。
使用varargs参数时, 请注意以下几点:
- 一个方法中只有一个varargs参数。
- Varargsagrument必须位于最后一个参数。
让我们看一个示例, 其中Java方法使用int类型varargs, 该类型从Kotlin文件中调用。
MyJava.java
public class MyJava {public void display(int... values) {for (int s : values) {System.out.println(s);
}}}
MyKotlin.kt
fun main(args: Array<
String>
){val myJava = MyJava()val array = intArrayOf(0, 1, 2, 3)myJava.display(*array)}
【Java互操作性】输出:
0123
让我们看看另一个示例, 该示例在Java方法中使用两个参数, 这些参数用作从Kotlin文件调用的String类型和int类型的v??arargs的参数。
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<
String>
){val myJava = MyJava()val array = intArrayOf(0, 1, 2, 3)myJava.display("hello", *array)}
输出:
string is hello0123
Kotlin和Java映射类型Kotlin和Java类型的映射方式不同, 但是它们映射至相应的类型。这些类型的映射仅在编译时才重要, 并且运行时保持不变。
Java的原始类型到对应的Kotlin类型
Java类型 | 科特林型 |
---|---|
byte | kotlin.Byte |
short | kotlin.Short |
int | kotlin.Int |
long | 长科特林 |
char | kotlin.Char |
double | kotlin.Double |
boolean | kotlin.Boolean |
Java类型 | 科特林型 |
---|---|
java.lang.Object | 科特林。 |
java.lang.Cloneable | kotlin.Cloneable! |
java.lang.Comparable | kotlin可比! |
java.lang.Enum | Kotlin.Enum! |
java.lang.annotation中 | kotlin.Annotation! |
java.lang.Deprecated | kotlin。已弃用! |
java.lang.CharSequence | kotlin.CharSequence! |
java.lang.String | kotlin.String! |
java.lang.Number | kotlin.Number! |
java.lang.Throwable | kotlin.Throwable! |
Java类型 | 科特林型 |
---|---|
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只读类型 | Kotlin可变型 |
---|---|---|
Iterator< T> | Iterator< T> | MutableIterator< T> |
Iterable< T> | Iterable< T> | MutableIterable< T> |
Collection< T> | Collection< T> | MutableCollection< T> |
Set< T> | MutableSet< T> | MutableSet< T> |
List< T> | MutableList< T> | MutableList< T> |
ListIterator< T> | ListIterator< T> | MutableListIterator< T> |
映射< K, V> | 映射< K, V> | MutableMap < K, V> |
Map.Entry < K, V> | Map.Entry < K, V> | MutableMap.MutableEntry < K, V> |
推荐阅读
- Java互操作性(从Java调用Kotlin代码)
- Kotlin不安全和安全的转换操作符
- Kotlin类型转换
- Kotlin教程介绍
- Kotlin try-catch语句
- Kotlin抛出关键字throw
- Kotlin字符串
- Kotlin智能投射
- Kotlin set接口