kotlin与java相互调用(代码片段)

Lucky_William Lucky_William     2023-02-24     426

关键词:

一、Kotlin 调用 Java

1. kotlin 关键字转义

java 中的方法或变量 是 kotlin 的关键字时,使用反引号 `` 对关键字进行转义

// java
public class JavaDemo 

    String is;

    public String getIs() 
        return is;
    

    public void setIs(String is) 
        this.is = is;
    

    public void in() 
        System.out.println("call java method in");
    
    
	public void multiParams(int... params) 
        System.out.println(Arrays.toString(params));
    

// kotlin
fun main() 
    // 1. java 中的方法或变量 是kotlin 的关键字时,使用反引号 `` 对关键字进行转义
    val demo = JavaDemo()

    // 调用 java 的 is 属性,is 是 kotlin 的关键字,使用反引号转义
    demo.`is` = "call java field"
    println(demo.`is`) // call java field

    // 调用 java 的 in 方法,in 是 kotlin 的关键字,使用反引号转义
    demo.`in`() // call java method in



2. kotlin 可将数组传给 java 的可变数量参数

// kotlin
// 使用 * 号将 kotlin 的 数组 传给 java 的 可变数量参数
fun main() 
	val arrayInt = intArrayOf(1, 2, 3)
	demo.multiParams(*arrayInt) // [1, 2, 3]


3. kotlin 获取对象的 java 类

// kotlin
fun main() 
 	demo::class.java
    demo.javaClass


二、Java 调用 Kotlin

1. java 调用 kotlin 类的属性和方法

// kotlin
class KotlinDemo 
    var field: String = "kotlin field"

    fun method() 
        println("call kotlin method")
    


// java
public static void main(String[] args) 
	KotlinDemo demo = new KotlinDemo();
    System.out.println(demo.getField()); // kotlin field
    demo.method(); // call kotlin method



2. java 调用 kotlin 的顶级属性和顶级函数

// kotlin
val topLevelField: Int
    get() 
        println("call kotlin top level field")
        return 1
    

fun topLevelFunc() 
    println("call kotlin top level function")

// java
public static void main(String[] args) 
	TestCallEachOtherKt.getTopLevelField(); // call kotlin top level field
    TestCallEachOtherKt.topLevelFunc(); // call kotlin top level function

        

3. java 调用生成指定类名的 kotlin 属性和函数

// kotlin
// 指定文件生成的 Java 类或方法的名称。
@file:JvmName("CallKtDemo")

package com.william.testkt

var field: Int = 100

fun method() 
    println("call CallKtDemo method")


// java
public static void main(String[] args) 
	System.out.println(CallKtDemo.getField());
    CallKtDemo.method();


4. java 调用 kotlin 的伴生对象的方法和静态方法

// kotlin
class TestCallKotlin 

    companion object 
    	// 模拟静态方法
        fun method1() 
            println("call method1")
        

		// 静态方法
        @JvmStatic 
        fun method2() 
            println("call method2")
        
    

// java
public static void main(String[] args) 
	TestCallKotlin.Companion.method1();
	TestCallKotlin.method2();


5. java 调用 kotlin 单例类的方法

// kotlin
object KotlinObject 

    fun method1() 
        println("call method1")
    

    @JvmStatic
    fun method2() 
        println("call method2")
    


// java
public static void main(String[] args) 
	KotlinObject.INSTANCE.method1();
    KotlinObject.method2();


6. java 调用 kotlin 含有 lambda 表达式参数的方法

// kotlin
object KotlinObject 

    // 参数为 lambda 表达式,入参为 Int,返回值为 Unit
    @JvmStatic
    fun method3(param: (Int) -> Unit = ) 
        param.invoke(101)
    

    // 参数为 lambda 表达式,入参为 Boolean,返回值为 String
    @JvmStatic
    fun method4(param: (Boolean) -> String =  "" ) 
        param.invoke(true)
    


// java
public static void main(String[] args) 

	KotlinObject.method3(new Function1<Integer, Unit>() 
     	@Override
        public Unit invoke(Integer integer) 
            System.out.println(integer);
            return null;
        
    );

    KotlinObject.method4(new Function1<Boolean, String>() 
        @Override
        public String invoke(Boolean param) 
            System.out.println("invoke param: " + param);
            return param ? "success" : "failed";
        
    );


附 Github 源码:

深入kotlin-与java互操作:kotlin调用java(代码片段)

Kotlin调用Java比如如下Java类:publicclassPerson privateStringname; privatebooleanmarried; privateintage; ......在kotlin中调用Person:funmain(args:Array<String>) vallist=ArrayList<String>//调用 查看详情

深入kotlin-与java互操作:kotlin调用java(代码片段)

Kotlin调用Java比如如下Java类:publicclassPerson privateStringname; privatebooleanmarried; privateintage; ......在kotlin中调用Person:funmain(args:Array<String>) vallist=ArrayList<String>//调用 查看详情

深入kotlin-与java互操作:kotlin调用java(代码片段)

Kotlin调用Java比如如下Java类:publicclassPerson privateStringname; privatebooleanmarried; privateintage; ......在kotlin中调用Person:funmain(args:Array<String>) vallist=ArrayList<String>//调用 查看详情

深入kotlin-与java互操作:java调用kotlin(代码片段)

Java调用kotlin属性Kotlin类的一个属性编译后,会产生3种Java对象:get方法,getXxxset方法,setXxx私有字段,字段名与kotlin属性名完全匹配。classTest varname:String=""如果kotlin属性名为is开头(Bool类型) 查看详情

深入kotlin-与java互操作:java调用kotlin(代码片段)

Java调用kotlin属性Kotlin类的一个属性编译后,会产生3种Java对象:get方法,getXxxset方法,setXxx私有字段,字段名与kotlin属性名完全匹配。classTest varname:String=""如果kotlin属性名为is开头(Bool类型) 查看详情

深入kotlin-与java互操作:java调用kotlin(代码片段)

Java调用kotlin属性Kotlin类的一个属性编译后,会产生3种Java对象:get方法,getXxxset方法,setXxx私有字段,字段名与kotlin属性名完全匹配。classTest varname:String=""如果kotlin属性名为is开头(Bool类型) 查看详情

kotlin集合操作④(set集合|可变set集合|list与set之间相互转换|数组类型)(代码片段)

文章目录一、Set集合二、可变Set集合三、List与Set之间相互转换四、数组类型一、Set集合List集合中的元素是可以重复的,Set集合中的元素不可重复;调用setOf函数,可以创建Set集合;调用Set#elementAt函数,可以读取Set集合中的元素;代码示... 查看详情

深入kotlin-与java互操作:kotlin调用java(代码片段)

Kotlin调用Java比如如下Java类:publicclassPerson privateStringname; privatebooleanmarried; privateintage; ......在kotlin中调用Person:funmain(args:Array<String>) vallist=ArrayList<String>//调用Java类arraylistlist.add("hello")list.add("world")for(item... 查看详情

kotlinkotlin与java互操作①(变量可空性|kotlin类型映射|kotlin访问私有属性|java调用kotlin函数)(代码片段)

文章目录一、Kotlin变量可空性1、Java与Kotlin空值处理区别2、Java函数返回非空值和控制3、Kotlin函数调用Java函数4、平台类型5、@NotNull和@Nullable注解二、Kotlin的Java类型映射三、Kotlin访问Java私有属性四、Java调用Kotlin函数1、函... 查看详情

kotlin与java互相调用之java调用kotlin的函数(代码片段)

...#61;utterance:String,test:Int->println(utterance)println(test)javaimportkotlin.Unit;importkotlin.jvm.functions.Function1;importkotlin.jvm.functions.Function2;publicclassJavaManpublicstaticvoidmain(String[]args)KTHerohero=newKTHero();Function1<String,Unit>translator=hero.getTranslato... 查看详情

kotlin集合操作④(set集合|可变set集合|list与set之间相互转换|数组类型)(代码片段)

文章目录一、Set集合二、可变Set集合三、List与Set之间相互转换四、数组类型一、Set集合List集合中的元素是可以重复的,Set集合中的元素不可重复;调用setOf函数,可以创建Set集合;调用Set#elementAt函数,可以读取Set集合中的元素;代码示... 查看详情

深入kotlin-与java互操作:java调用kotlin(代码片段)

Java调用kotlin属性Kotlin类的一个属性编译后,会产生3种Java对象:get方法,getXxxset方法,setXxx私有字段,字段名与kotlin属性名完全匹配。classTest varname:String=""如果kotlin属性名为is开头(Bool类型)&... 查看详情

kotlinkotlin与java互操作②(@jvmfield注解字段给java|@jvmoverloads注解修饰函数|@jvmstatic注解声明静态成员)(代码片段)

文章目录一、使用@JvmField注解暴露Kotlin字段给Java1、Java类中通过Getter和Setter方法访问Kotlin字段2、Java类中直接访问被@JvmField注解修饰的Kotlin字段二、使用@JvmOverloads注解修饰Kotlin函数1、Kotlin默认参数函数调用示例2、Java中... 查看详情

kotlin初学者java和kotlin互操作(代码片段)

...#xff1a;CSDN博客专家、华为云·云享专家认证系列专栏:Kotlin初学者五星好评:左侧点一下(网页端),移动端:https://bbs.csdn.net/topics/603956616目录一、Kotlin调用Java1.1互操作性与可空性1.2类型映射1.3属性访问二、Java调用K... 查看详情

kotlin初学者java和kotlin互操作(代码片段)

...#xff1a;CSDN博客专家、华为云·云享专家认证系列专栏:Kotlin初学者五星好评:左侧点一下(网页端),移动端:https://bbs.csdn.net/topics/603956616目录一、Kotlin调用Java1.1互操作性与可空性1.2类型映射1.3属性访问二、Java调用K... 查看详情

kotlin初学者java和kotlin互操作(代码片段)

...#xff1a;CSDN博客专家、华为云·云享专家认证系列专栏:Kotlin初学者五星好评:左侧点一下(网页端),移动端:https://bbs.csdn.net/topics/603956616目录一、Kotlin调用Java1.1互操作性与可空性1.2类型映射1.3属性访问二、Java调用K... 查看详情

kotlin与java的比较:函数(代码片段)

1.基本函数java代码:publicvoidhello()System.out.print("Hello,World!");kotlin代码:funhello( 查看详情

一次搞懂java如何调用kotlin的高级特性(代码片段)

Java如何调用Kotlin前言虽然Kotlin推出很多年了,但是在国内的普及度并没有成压倒性优势,还是有很多新老项目使用Java语言开发的。(Java永不为奴😅😅)如果项目中其他小伙伴使用的Kotlin,而我只会Ja... 查看详情