Kotlin與Java相互調(diào)用的完整實例
一、Kotlin 調(diào)用 Java
1. kotlin 關(guān)鍵字轉(zhuǎn)義
java 中的方法或變量 是 kotlin 的關(guān)鍵字時,使用反引號 `` 對關(guān)鍵字進(jìn)行轉(zhuǎn)義
// 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 的關(guān)鍵字時,使用反引號 `` 對關(guān)鍵字進(jìn)行轉(zhuǎn)義 val demo = JavaDemo() // 調(diào)用 java 的 is 屬性,is 是 kotlin 的關(guān)鍵字,使用反引號轉(zhuǎn)義 demo.`is` = "call java field" println(demo.`is`) // call java field // 調(diào)用 java 的 in 方法,in 是 kotlin 的關(guān)鍵字,使用反引號轉(zhuǎn)義 demo.`in`() // call java method in }
2. kotlin 可將數(shù)組傳給 java 的可變數(shù)量參數(shù)
// kotlin // 使用 * 號將 kotlin 的 數(shù)組 傳給 java 的 可變數(shù)量參數(shù) 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 調(diào)用 Kotlin
1. java 調(diào)用 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 調(diào)用 kotlin 的頂級屬性和頂級函數(shù)
// 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 調(diào)用生成指定類名的 kotlin 屬性和函數(shù)
// 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 調(diào)用 kotlin 的伴生對象的方法和靜態(tài)方法
// kotlin class TestCallKotlin { companion object { // 模擬靜態(tài)方法 fun method1() { println("call method1") } // 靜態(tài)方法 @JvmStatic fun method2() { println("call method2") } } }
// java public static void main(String[] args) { TestCallKotlin.Companion.method1(); TestCallKotlin.method2(); }
5. java 調(diào)用 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 調(diào)用 kotlin 含有 lambda 表達(dá)式參數(shù)的方法
// kotlin object KotlinObject { // 參數(shù)為 lambda 表達(dá)式,入?yún)?Int,返回值為 Unit @JvmStatic fun method3(param: (Int) -> Unit = {}) { param.invoke(101) } // 參數(shù)為 lambda 表達(dá)式,入?yún)?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 源碼:
總結(jié)
到此這篇關(guān)于Kotlin與Java相互調(diào)用的文章就介紹到這了,更多相關(guān)Kotlin與Java相互調(diào)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android應(yīng)用程序轉(zhuǎn)到后臺并回到前臺判斷方法
這篇文章主要介紹了Android應(yīng)用程序轉(zhuǎn)到后臺并回到前臺判斷方法的相關(guān)資料,需要的朋友可以參考下2016-11-11Textvie實現(xiàn)左邊圖片和換行文字左對齊的方法
下面小編就為大家分享一篇Textvie實現(xiàn)左邊圖片和換行文字左對齊的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01Android學(xué)習(xí)之Span的使用方法詳解
這篇文章主要為大家詳細(xì)介紹了Android中各種Span類的使用方法,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Android有一定的幫助,需要的可以參考一下2022-06-06