1,Java 接口类 :JavaCallback.java
public interface JavaCallback {
void show(String info);
}
java 接口使用类:
public class JavaManager {
public void setCallback(JavaCallback javaCallback){
javaCallback.show("info");
}
}
2,Kotlin接口类:KTCallback.kt
interface KTCallback {
fun show(name:String)
}
kotlin接口使用类:
class KTManager {
fun setCallback(ktCallback: KTCallback){
ktCallback.show("name")
}
}
3,Java调用测试类:ClientJava.java
import kotlin.jvm.JvmClassMappingKt;
import kotlin.reflect.KClass;
public class ClientJava {
public static void main(String[] args) {
//接口调用测试
//java -- java 匿名callback
new JavaManager().setCallback(new JavaCallback() {
@Override
public void show(String info) {
}
});
//Java -- Java 实名callback
JavaCallback javaCallback = new JavaCallback() {
@Override
public void show(String info) {
}
};
new JavaManager().setCallback(javaCallback);
//java -- kotlin 匿名callback
new KTManager().setCallback(new KTCallback() {
@Override
public void show(@NonNull String name) {
}
});
//java -- kotlin 实名callback
KTCallback ktCallback = new KTCallback() {
@Override
public void show(@NonNull String name) {
}
};
new KTManager().setCallback(ktCallback);
//总结:kt callback ,java callback
//在Java调用使用中都一样,和Java callback使用一致
showJava1(JavaStudent.class);
//DOTO 需要特别注意!!!获得KT的类
showJava2(JvmClassMappingKt.getKotlinClass(KtStudent.class));
}
public static void showJava1(Class clazz){
}
public static void showJava2(KClass clazz){
}
}
4,kotlin调用测试类:ClientKt.kt
import kotlin.reflect.KClass
fun main() {
//kt使用Java callback=======================
//大分类一:直接写一个匿名的callback
//第一中写法:没object
JavaManager().setCallback(JavaCallback {
println(it)
})
//第二种写法:有object
JavaManager().setCallback(object : JavaCallback {
override fun show(info: String?) {
TODO("Not yet implemented")
}
})
//第二种写法的lambda写法
JavaManager().setCallback { it -> println(it) }
//大分类二:新建一个callback变量,再设置回去
//第三种写法:没有object
val callback = JavaCallback {
print(it)
}
JavaManager().setCallback(callback)
//第四种写法:有object
val callback2 = object : JavaCallback {
override fun show(info: String?) {
println(info)
}
}
JavaManager().setCallback(callback2)
//总结:Java使用Java callback可以匿名,实名使用Java callback
//且 同时使用有或没有object 的callback都可以
//kt使用kt callback====================
//方法一:直接写匿名object callback
KTManager().setCallback(object : KTCallback {
override fun show(name: String) {
TODO("Not yet implemented")
}
})
//不能像Java接口一样,不写object
/*KTManager().setCallback(KTCallback{
})*/
//方法二:单独new一个实名 object callback
val ktCallback =object :KTCallback{
override fun show(name: String) {
TODO("Not yet implemented")
}
}
KTManager().setCallback(ktCallback)
//总结:kt使用kt callback 只能使用有object的callback形式
showClass(JavaStudent::class.java)
showClass11(KtStudent::class.java)
showClass1(JavaStudent::class)
showClass2(KtStudent::class)
//总结:kt文件中xxx::class就是KClass
//xxx::class.java就是JavaClass
}
//形参内外都是是Java
fun showClass(clazz: Class<JavaStudent>) {
}
//形参内外都是是Java
fun showClass11(clazz: Class<KtStudent>) {
}
//外边是KClass,里边是JavaClass
fun showClass1(clazz: KClass<JavaStudent>) {
}
//全部是kt
fun showClass2(clazz: KClass<KtStudent>) {
}