Kotlin與Java相互調(diào)用的完整實(shí)例
一、Kotlin 調(diào)用 Java
1. kotlin 關(guān)鍵字轉(zhuǎn)義
java 中的方法或變量 是 kotlin 的關(guān)鍵字時(shí),使用反引號(hào) `` 對(duì)關(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)鍵字時(shí),使用反引號(hào) `` 對(duì)關(guān)鍵字進(jìn)行轉(zhuǎn)義
val demo = JavaDemo()
// 調(diào)用 java 的 is 屬性,is 是 kotlin 的關(guān)鍵字,使用反引號(hào)轉(zhuǎn)義
demo.`is` = "call java field"
println(demo.`is`) // call java field
// 調(diào)用 java 的 in 方法,in 是 kotlin 的關(guān)鍵字,使用反引號(hào)轉(zhuǎn)義
demo.`in`() // call java method in
}
2. kotlin 可將數(shù)組傳給 java 的可變數(shù)量參數(shù)
// kotlin
// 使用 * 號(hào)將 kotlin 的 數(shù)組 傳給 java 的 可變數(shù)量參數(shù)
fun main() {
val arrayInt = intArrayOf(1, 2, 3)
demo.multiParams(*arrayInt) // [1, 2, 3]
}
3. kotlin 獲取對(duì)象的 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 的頂級(jí)屬性和頂級(jí)函數(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 的伴生對(duì)象的方法和靜態(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android應(yīng)用程序轉(zhuǎn)到后臺(tái)并回到前臺(tái)判斷方法
這篇文章主要介紹了Android應(yīng)用程序轉(zhuǎn)到后臺(tái)并回到前臺(tái)判斷方法的相關(guān)資料,需要的朋友可以參考下2016-11-11
Android自定義UI手勢(shì)密碼簡(jiǎn)單版
這篇文章主要為大家詳細(xì)介紹了Android自定義UI手勢(shì)密碼簡(jiǎn)單版2016-10-10
kotlin實(shí)現(xiàn)通知欄提醒功能示例代碼
這篇文章主要給大家介紹了關(guān)于kotlin實(shí)現(xiàn)通知欄提醒功能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用kotlin具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Listview中Button搶占焦點(diǎn)的解決方法
在程序開發(fā)中經(jīng)常見到listview button搶占焦點(diǎn)的問題,怎么回事什么原因呢?下面小編給大家?guī)?lái)了Listview中Button搶占焦點(diǎn)的解決方法,感興趣的朋友一起看下吧2016-08-08
Textvie實(shí)現(xiàn)左邊圖片和換行文字左對(duì)齊的方法
下面小編就為大家分享一篇Textvie實(shí)現(xiàn)左邊圖片和換行文字左對(duì)齊的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
Android學(xué)習(xí)之Span的使用方法詳解
這篇文章主要為大家詳細(xì)介紹了Android中各種Span類的使用方法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Android有一定的幫助,需要的可以參考一下2022-06-06
Android實(shí)現(xiàn)手機(jī)攝像頭的自動(dòng)對(duì)焦
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)手機(jī)攝像頭的自動(dòng)對(duì)焦的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
Android 無(wú)障礙全局懸浮窗實(shí)現(xiàn)示例
本文主要介紹了Android 無(wú)障礙全局懸浮窗實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06

