Kotlin 调用 Java
1、属性名或者方法名是关键字
在 kotlin 中 is、object等都是关键字,但是 java 中不是
public static void is() {}
public static void object() {}
在 kotlin
中调用的时候需要添加 `名字`
// is object 是关键字
JavaTest.`is`()
JavaTest.`object`()
2、 Java
中数组与可变长度参数
Java
中的可变参数其实是一个数组
public static void array(String[] args) {
array2(args);
}
public static void array2(String... args) {}
在 Kotlin
中调用
// java数组与可变长度参数
JavaTest.array(arrayOf<String>("a", "b"))
// 这里要前面加一个 * 号,展开操作符,相当于参数就是 "a","b"
JavaTest.array2(*arrayOf("a", "b"))
3、 Java Object
Java 中类的父类是 Object,Object 里面有 wait() 等
如果要在 Kotlin 中调用 wait()
// 调用java object里的方法
val o = JavaTest() as java.lang.Object
o.wait()
4、操作符重载
/**
* invoke 在kotlin中是操作符
*/
public void invoke() {}
invoke
在 kotlin
中是操作符重载方法的方法名,则可以使用操作符调用相应的 java
方法
val jt = JavaTest()
jt.invoke()
JavaTest()()
jt()
5、native
方法
Java
中的 c/c++
的方法用 native
关键字
Kotlin
中的 c/c++
的方法用 external
关键字
external fun sum(x: Int, y: Int): Int
引入库
init {
System.loadLibrary("kotlin-native")
}
实现方法
#include "jni.h"
extern "C"
JNIEXPORT jint JNICALL
Java_com_pf_testkotlinwithjava_MainActivity_sum(JNIEnv *, jobject, jint x, jint y) {
return x + y;
}
CMakeLists.txt
#版本号
cmake_minimum_required(VERSION 3.4.1)
file(GLOB my_source_path src/main/cpp/*.cpp src/main/cpp/*.c)
#添加模块
add_library( #模块名
kotlin-native
# 动态库
SHARED
#源文件
${my_source_path} )
#需要链接或者编译的库
target_link_libraries(kotlin-native)