面试题答案
一键面试Kotlin的List
与Java的ArrayList
相互转换
Kotlin的List
转Java的ArrayList
在Kotlin中,List
是只读接口,要转换为Java的ArrayList
,可以使用ArrayList
的构造函数。
import java.util.ArrayList
fun main() {
val kotlinList: List<Int> = listOf(1, 2, 3)
val javaArrayList = ArrayList(kotlinList)
println(javaArrayList)
}
Java的ArrayList
转Kotlin的List
Java的ArrayList
可以直接赋值给Kotlin的List
,因为Kotlin的List
是只读接口,而ArrayList
实现了List
接口。
import java.util.ArrayList
fun main() {
val javaArrayList = ArrayList<Int>()
javaArrayList.add(1)
javaArrayList.add(2)
val kotlinList: List<Int> = javaArrayList
println(kotlinList)
}
Kotlin的String
与Java的String
在互操作性中的注意事项
在Kotlin与Java相互调用时,Kotlin的String
与Java的String
是完全兼容的,因为Kotlin的String
在底层就是Java的String
。
从Kotlin调用Java方法
当在Kotlin中调用Java方法并传递String
参数时,直接传递Kotlin的String
即可。
class JavaClass {
public static void printString(String str) {
System.out.println(str);
}
}
fun main() {
val kotlinString = "Hello from Kotlin"
JavaClass.printString(kotlinString)
}
从Java调用Kotlin方法
当在Java中调用Kotlin方法并传递String
参数时,直接传递Java的String
即可。
fun printString(str: String) {
println(str)
}
public class Main {
public static void main(String[] args) {
String javaString = "Hello from Java";
MainKt.printString(javaString);
}
}
需要注意的是,虽然二者在互操作性上很顺畅,但Kotlin对String
提供了一些额外的扩展函数,在Java中调用Kotlin代码使用这些扩展函数时,需要使用Kt
后缀的类名来调用。例如上述printString
函数在Java中调用使用MainKt
类名。