kotlin,java接口大乱调

44 篇文章 0 订阅

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>) {

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值