Java类如何调用Kotlin的函数类型

本文展示了在Java8之前如何通过Function接口调用Kotlin的函数类型属性,包括从Function0到Function23的各种情况。在Kotlin中定义了多个函数类型变量,并在Java和Kotlin类内部进行调用,演示了不同参数数量的函数类型的使用。
摘要由CSDN通过智能技术生成

 在java8之前,JDK不支持lamda表达式,所以在java类里 只能使用FunctionN 来调用Kotlin的函数类型属性,N表示值参数数目, 所以共有Funcion0 到Function23()个方法,每一个FunctionN 都包含一个invoke()函数,专门用于调用函数类型函数。

  kotlin类包含了很多各种各样的函数类型

@file:JvmName("Hero")

class   HeroKt {


val translator0 : () -> Unit  = { println("哈哈") }

val translator01 : () -> String  = { "你好" }



//添加一个translator的函数类型,接收一个字符串,
//将其改为小写字母,再大写第一个字符,最后打印结果。
val translator1: (String) -> Unit = { utterance: String ->
    println(utterance.toLowerCase().capitalize())
}


val translator2: (String,Int) -> Unit = { name: String,age:Int ->
     println("$name, $age")
}

val translator3: (String,Int,String) -> String = { name: String,age:Int,sex:String ->
        "$name, $age, $sex"
}


   var  translator41: ((String, Int, String, Int) -> Unit)? = null
   var  translator42: ((String, Int, String, Int) -> String)? =null



fun main() {
}


}

在 Java类里 Jhava调用 Kotlin 类的Hero 函数类型

public class Jhava {

 public static void main(String[] args) {
  

         //官方写法
         Function0<Unit> translator0 =  Hero.getTranslator0();
          translator0.invoke();//哈哈

        //简写
        Hero.getTranslator0().invoke(); //哈哈



        Function0<String>    translator01 =   Hero.getTranslator01();

        System.out.println( translator01.invoke() ); //你好


 
        Function1<String, Unit> translator1 = Hero.getTranslator1();
        translator1.invoke("TRUCE"); //Truce



         Function2<String,Integer,Unit> translator2 =   Hero.getTranslator2();
        translator2.invoke("方明飞",34); // 方明飞, 34


 Function3<String,Integer,String,String>    translator3 =   Hero.getTranslator3();
        System.out.println(  translator3.invoke("方明飞",34,"男") ); //方明飞, 34, 男





 Hero.setTranslator41(new Function4<String, Integer, String, Integer, Unit>() {

            @Override
            public Unit invoke(String s, Integer integer, String s2, Integer integer2) {
                System.out.println(s+integer+s2+integer2); //方明飞23男160
                return null;
            }
        });
       Hero.getTranslator41().invoke("方明飞",23,"男",160);



   Hero.setTranslator42(new Function4<String, Integer, String, Integer, String>() {
            @Override
            public String invoke(String s, Integer integer, String s2, Integer integer2) {
                System.out.println(s+integer+s2+integer2); //方明飞23男170
                return  s+integer+s2+integer2;
              }
        });

 Hero.getTranslator42().invoke("方明飞",23,"男",170);


}


}

在 Kotlin类Spellbook里 调用 Kotlin 类的Hero 函数类型

class Spellbook {

fun main(){
translator0.invoke() //哈哈
   val str01 =  translator01.invoke()
    println(str01) //你好


 translator1.invoke("FMF") //Fmf

    translator2.invoke("方明飞",23) //方明飞, 23

    val str03 =  translator3.invoke("方明飞",23,"男")
    println(str03) //方明飞, 23, 男



    translator41={ s: String, i: Int, s1: String, i1: Int ->
        println("$s $i $s1 $i1") //方明飞 23 男 160
    }

    translator41?.invoke("方明飞",23,"男",160)


  translator42   = { s: String, i: Int, s1: String, i1: Int ->
       "$s $i $s1 $i1"   //方明飞 23 男 160
     }

 val  str  =  translator42?.invoke("方明飞",23,"男",170)
   println(str) //方明飞 23 男 170
}





}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值