Kotlin 与 Java 相互调用

Kotlin与Java的相互调用 Kotlin调用java public class MyJavaClass{ public static MyJavaClass object = new MyJavaClass(); @Override public String toString(){ return "MyJavaClass{}"; } } kotlin fun main(args: Array<String>){ //需要加反引用符号,!左侧的按键 阅读详情

一、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 表达式参数的方法

当在 java 中赋值 kotlin 的 lambda 表达式时,用 FunctionN 指代,N:表达式入参的数量,尖括号最后一个类型:表达式返回值的类型

// 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)
    }

    // 参数为 lambda 表达式,无入参,返回值为 Unit
    @JvmStatic
    fun method5(param: () -> Unit) {
        param.invoke()
    }

    // 参数为 lambda 表达式,入参为 Int, String,返回值为 Boolean
    @JvmStatic
    fun method6(param: (Int, String) -> Boolean) {
        param.invoke(100, "string value")
    }
}

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

	// 参数为 lambda 表达式,入参为 Int,返回值为 Unit
	KotlinObject.method3(new Function1<Integer, Unit>() {
     	@Override
        public Unit invoke(Integer integer) {
            System.out.println(integer);
            return null;
        }
    });

	// 参数为 lambda 表达式,入参为 Boolean,返回值为 String
    KotlinObject.method4(new Function1<Boolean, String>() {
        @Override
        public String invoke(Boolean param) {
            System.out.println("invoke param: " + param);
            return param ? "success" : "failed";
        }
    });
    
	// 参数为 lambda 表达式,无入参,返回值为 Unit
    KotlinObject.method5(new Function0<Unit>() {
         @Override
         public Unit invoke() {
             System.out.println("invoke method5 no params");
             return null;
         }
     });

     // 参数为 lambda 表达式,入参为 Int, String,返回值为 Boolean
     KotlinObject.method6(new Function2<Integer, String, Boolean>() {
         @Override
         public Boolean invoke(Integer integer, String s) {
             System.out.println("invoke method6 params:integer=" + integer + ", s=" + s);
             return integer > 0;
         }
     });
}

7. kotlin 使用 @JvmOverloads 注解强制生成重载方法

对于有默认值的函数或方法,可以使用 @JvmOverloads 注解强制生成多个重载方法,以方便其在 java 中调用

// kotlin
class KotlinDemo {
    /**
     * @JvmOverloads 注解会生成以下重载方法:
     * 当参数有默认值时,会生成对应的重载方法。注意 p0 没有默认值
     *
     * void overloadMethod1(int p0)
     * void overloadMethod1(int p0, int p1)
     * void overloadMethod1(int p0, int p1, String p2)
     */
    @JvmOverloads
    fun overloadMethod1(p0: Int, p1: Int = 1, p2: String = "") {
    }

    /**
     * @JvmOverloads 注解会生成以下重载方法:
     *
     * void overloadMethod2()
     * void overloadMethod2(int p0)
     * void overloadMethod2(int p0, int p1)
     * void overloadMethod2(int p0, int p1, String p2)
     */
    @JvmOverloads
    fun overloadMethod2(p0: Int = 0, p1: Int = 1, p2: String = "") {
    }
}
// java
public static void main(String[] args) {
 	KotlinDemo demo = new KotlinDemo();
 	
	// 调用 kotlin 的重载方法
    demo.overloadMethod1(0);
    demo.overloadMethod1(0, 1);
    demo.overloadMethod1(0, 1, "p2");

	// 调用 kotlin 的重载方法
    demo.overloadMethod2();
    demo.overloadMethod2(0);
    demo.overloadMethod2(0, 1);
    demo.overloadMethod2(0, 1, "p2");
}

附 Github 源码:

115.工业相机海康SDK开发指南(阅读) 包含初始化SDK和反初始化SDK接口。(由于看不到函数内部的具体实现,因此以下的解释仅代表个人的理解) 阅读详情

相关推荐

实用电路精讲系列---仪表放大器

摘要 仪表放大器通过三级运放架构实现高共模抑制比(CMRR>100dB)和精密差分放大,其核心是第一级同相运放提供高输入阻抗和可调增益(G=1+2R/RG),第二级差分运放消除共模干扰。具有低失调(≤50μV)、低温漂(≤0.6μV/℃)特性,广泛应用于智能断路器电流监测、ECG心电信号放大等场景。典型电路采用LTC1049运放,通过匹配电阻网络实现199倍差分增益,结合输出缓冲确保信号稳定性。设计时需注意输入共模电压范围限制和增益电阻精度,优选集成IC(如AD620、INA128)以规避分立元件匹配

weixin_40590799的博客 2071

【深入kotlin】 - 与Java互操作:kotlin调用java

比如如下 Java 类: 在 kotlin 中调用 Person: 平台类型 在 kotlin 中为了解决 Java 中所有引用类都是可空类型的问题,将所有来自于 java 的类型称为平台类型(platform types)。对这种类型kotlin 不再执行严格的非空检查。 数组 数组在 kotlin 中是,即不支持协变/逆变(out/in)。但 java 不同: Kotlin 中的数组更加安全,它不允许协变/逆变,你无法将一个 Array 赋给 Array(编译不通过)。数组参数也是如此。Java 中,允

kmyhy的专栏 2686

【学习笔记】《基于φ-OTDR的分布式扰动传感系统定位算法研究-北交-通信与信息系统-吴》重点笔记

一、绪论 1.1 引言 光纤传感器的优点:跟电子传感器相比较,光纤传感器有诸多独特的优势:对电磁干扰免疫;具有很好的绝缘性和耐腐蚀性;灵敏度高,可测量微弱信息;可实现大范围监测和分布式传感,仅需一根传感光纤,更为经济便捷;传感光纤体积小、重量轻、可形变,适用于一些特殊应用场所;还有无需供电、耐高温、便于组网等等优点 光纤传感器的感知信号的方法:当探测光入射到光纤中时会发生散射并产生各种散射光...

qq_36045093的博客 2万+

一次搞懂Java如何调用Kotlin的高级特性

虽然 Kotlin 推出很多年了,但是在国内的普及度并没有成压倒性优势,还是有很多新老项目使用Java语言开发的。(Java永不为奴 :sweat_smile::sweat_smile:)如果项目中其他小伙伴使用的Kotlin,而我只会Java,那我怎么调用他Kotlin的方法?其实Kotlin早给我们做好了兼容,很多特性我们都可以使用Java来调用。下面一起看看一些常用的Kotlin特性如何使用Java语言来调用。一、Java调用KT属性与方法Kotlin的属性与方法,在Java中的调用。

AS011x的博客 3986

设备树实践:从零构建一个嵌入式板级的设备树描述

本文详细介绍了如何从零开始为嵌入式Linux系统构建设备树(Device Tree),以i.MX6ULL处理器为例,涵盖硬件分析、设备树语法、外设配置及调试技巧。通过实践指导,帮助开发者掌握设备树编写,实现硬件与软件的高效对接,提升嵌入式开发效率。

plum99的博客 305

量化实战:用三种波动率模型给你的期货策略做个“体检”(附Python代码与螺纹钢案例)

本文深入探讨了三种专业波动率模型(Parkinson、Garman-Klass和Rogers-Satchell)在期货量化策略中的应用,并以螺纹钢期货为例,展示了如何通过Python实现这些模型进行多维度波动率分析。文章详细比较了不同模型的特点和适用场景,提供了动态仓位管理、止损策略优化等实战应用方案,帮助交易者更精准地评估市场风险,优化策略表现。

weixin_26824299的博客 460

kotlin(十七)Kotlin和Java相互调用

Java和Kotlin互相调用

牛永志的专栏 3433

风电功率预测项目技术白皮书:短期、超短期、中长期全尺度算法详解与工程落地

聚焦风电功率预测的时间尺度与算法:短期(0~72h)以XGBoost/LightGBM/CatBoost及深度学习为主,超短期(0~4h)采用ARMA+LSTM,中长期用LightGBM等,并涵盖概率预测、多气象源融合、AI大模型+物理模型混合策略、极端天气应对及工程运维要点。

算法工程师 324

【深入kotlin】 - 与Java互操作:java调用kotlin

Kotlin 类的一个属性编译后,会产生 3 种 Java 对象: 如果 kotlin 属性名为 is 开头(Bool 类型),get 方法名 = 属性名,set 方法名则是将 is 替换为 set,字段名=属性名。当对 kotlin 属性使用该注解修饰后,这个属性就变成一个实例变量(public),kotlin 编译器不会生成 get/set 方法。在 java 中直接通过字段名进行访问。Kotlin 顶层对象会编译成静态成员、静态方法。类名是文件名+Kt。...

kmyhy的专栏 6071

第六:Charles抓包-苹果手机抓包

【代码】第六:Charles抓包-苹果手机抓包。

欢迎来到本博客! 1658

Unreal从入门到精通之如何绘制用于VR的3DUI交互的手柄射线

之前我写过一篇文章《Unreal5从入门到精通之如何在VR中使用3DUI》,其中讲到使用WidgetComponent和3DUI进行交互。然而,这种方法存在一个问题:为了让射线可视化,我们需要勾选“调试/显示调试”,这样才能在手柄上看到代表其指向的一条红色射线。但最关键的问题是,这个显示调试信息的功能只属于Debug调试模式,也就是说,一旦将项目正式打包发布,这条射线辅助线就没有了。如下图所示:我就觉得Unreal官方真的是有点过分了,这不应该是最基本的功能么?难道我们VR要在Debug模式下发布?

TxNet 1612

Kotlin程序设计 扩展篇(一)

为了统计学生成绩,要求设计一个Score对象,包括课程名称、课程号、课程成绩,但是成绩分为两种,一种是以优秀、良好、合格来作为结果,还有一种就是这样的数字分数,可能高等数学这门课是以数字成绩进行结算,而计算机网络实验这门课是以等级进行结算,这两种分数类型都有可能出现,那么现在该如何去设计这样的一个Score类呢?现在的问题就是,成绩可能是String类型,也可能是Int类型,如何才能更好的去存可能出现的两种类型呢?//因为Any是所有类型的父类,因此既可以存放Int也能存放String。

qq_25928447的博客 1057

【SigmaStudio】自定义算法组件之XML编写规范(一)

SigmaStudio生成自定义算法组件时,需要XML和DLB文件,本文主要记录XML文件的编码规范

liang_song的博客 1139

kotlin开发Android入门篇七Kotlin与Java相互调用

基础篇:Kotlin与Java相互调用 Kotlin调用java十分简单实例化java对象调用就行了同理java调用kotlin也是实例化调用就行了或者通过对象.静态对象OR方法都可以调用具体如下   分别实例化对象和调用静态方法(Kotlin调用java)   注意Koltin静态方法声明分为两个一种了Companion obje{}进行包裹的静态方法这种写法称为局部静态而通过ob

易庞宙的博客 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

java 调用 kotlin_Kotlin与Java相互调用

Kotlin的设计过程中就考虑到了与Java的互操作性。在Kotlin中可以直接调用既有的Java代码, 反过来在Java中也可以很流畅地使用Kotlin代码。Kotlin 调用 Java一、大多数Java代码,可以直接调用:fun () {val list = ArrayList()list.add("hello world")}二、特殊的调用规则以下为Kotlin调用Java的一些特殊调用规则...

weixin_33281416的博客 420

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Kotlin与Java的相互调用详解

文章目录一、Kotlin 调 Java1、访问属性2、将 Kotlin 中是关键字的 Java 标识符进行转义3、空安全与平台类型4、已映射类型5、Java数组6、Java 可变参数7、受检异常8、对象方法8-1、wait()/notify()8-2、getClass(),获取类的Class对象8-3、clone()8-4、finalize()9、SAM 转换9-1、SAM转换详解9-2、 SAM 转换的歧义消除9-3、Kotlin函数式接口9-4、SAM转换限制10、在Kotlin中使用JNI二、Java

u011118524的专栏 9914

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

java kotlin相互调用_kotlin和Java的相互调用示例详解

kotlin和Java的相互调用示例详解发布于 2020-7-14|复制链接Kotlin 的设计过程中就考虑到了与 Java 的互操作性。在 Kotlin 中可以直接调用既有的 Java 代码, 反过来在 Java 中也可以很流畅地使用 Kotlin 代码,下面前言互操作就是在Kotlin中可以调用其他编程语言的接口,只要它们开放了接口,Kotlin就可以调用其成员属性和成员方法,这是其他编程语言...

weixin_27219587的博客 387

kotlin与Java相互调用

1.在kotlin中调用Java方法 Kotlin和Java是两种不同的语言,所以在互相调用的时候,会有一些特殊的语法。kotlin中对象属性默认就带有setter和getter方法,所以在kotlin中调用Java时直接变量名点属性就可获取到属性的setter和getter的一些操作。如下面的Java对象,在kotlin中也可以直接mAccount.setAccount(“秦川小将”);或者m...

Liuqz2009的专栏 516

java kotlin相互调用_Kotlin的互操作——Kotlin与Java互相调用

原标题:Kotlin的互操作——Kotlin与Java互相调用互操作就是在Kotlin中可以调用其他编程语言的接口,只要它们开放了接口,Kotlin就可以调用其成员属性和成员方法,这是其他编程语言所无法比拟的。同时,在进行Java编程时也可以调用Kotlin中的API接口。Kotlin与Java互操作1 Kotlin调用JavaKotlin在设计时就考虑了与Java的互操作性。可以从Kotlin中...

weixin_39777242的博客 669

java 调用 kotlin_kotlin和Java的相互调用示例详解

前言互操作就是在Kotlin中可以调用其他编程语言的接口,只要它们开放了接口,Kotlin就可以调用其成员属性和成员方法,这是其他编程语言所无法比拟的。同时,在进行Java编程时也可以调用Kotlin中的API接口。1.在kotlin中调用Java方法Kotlin和Java是两种不同的语言,所以在互相调用的时候,会有一些特殊的语法。kotlin中对象属性默认就带有setter和getter方法,所...

weixin_33531560的博客 908

java如何调用kotlin_kotlin和Java的相互调用示例详解

前言互操作就是在Kotlin中可以调用其他编程语言的接口,只要它们开放了接口,Kotlin就可以调用其成员属性和成员方法,这是其他编程语言所无法比拟的。同时,在进行Java编程时也可以调用Kotlin中的API接口。1.在kotlin中调用Java方法Kotlin和Java是两种不同的语言,所以在互相调用的时候,会有一些特殊的语法。kotlin中对象属性默认就带有setter和getter方法,所...

weixin_35897479的博客 710

Kotlin 和 Java 相互调用

Kotlin 的设计过程中就考虑到了与 Java 的互操作性。在 Kotlin 中可以直接调用既有的 Java 代 码, 反过来在 Java 中也可以很流畅地使用 Kotlin 代码。Kotlin 调用 Java大多数Java代码,可以直接调用import java.util.*fun demo() { val list = ArrayList<string>() list.add

大山 1万+

Android Kotlin和Java相互调用使用的注解

Kotlin和Java相互调用使用的注解 `@JvmName`、`@JvmField`、`@JvmStatic`、`@Throws`、`@JvmOverloads`

嗯... 1216

java代码可以调用kotlin方法吗_Kotlin 和 Java 相互调用

Kotlin 的设计过程中就考虑到了与 Java 的互操作性。在 Kotlin 中可以直接调用既有的 Java 代码, 反过来在 Java 中也可以很流畅地使用 Kotlin 代码。Kotlin 调用 Java大多数Java代码,可以直接调用import java.util.*fun demo() {val list = ArrayList()list.add("hello world")}符合 ...

weixin_39811842的博客 505

Kotlin与java的互操作-Kotlin在Android中的使用(三)

文章目录一、Java调用Kotlin1.对象2.实例字段3.静态字段4.静态方法5.可见性6.生成重载7.受检异常8.空安全性二、Kotlin调用Java1.Getter 和 Setter2.返回 void 的方法3.将 Kotlin 中是关键字的 Java 标识符进行转义4.空安全与平台类型5.注解类型参数6.已映射类型7.Kotlin 中的 Java 泛型8.Java 数组9.Java 可变参...

呆屁的博客 4765
上一篇: Kotlin 注解
下一篇: Android 11 适配 软件包可见性
Lucky_William
博客等级 码龄11年 161粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值