最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java與Kotlin互調(diào)原理講解

 更新時間:2022年02月18日 14:25:57   作者:Petterpx  
這篇文章主要介紹了Java與Kotlin互調(diào)原理,分享內(nèi)容有Kt調(diào)用-Java參數(shù)非null的處理、Java中使用kt關(guān)鍵字聲明的變量和方法、Kt調(diào)用Java-SAM轉(zhuǎn)換等內(nèi)容,需要的小伙伴可以參考一下

一、Kt調(diào)用-Java參數(shù)非null的處理

@NotNull

class TestJava {
? ? public void toNotNull(@NotNull String title) {}

? ? public void toNull(String title){}
}

Kotlin中調(diào)用

二、Kt調(diào)用- Java中使用kt關(guān)鍵字聲明的變量和方法

kotlin中調(diào)用java方法,參數(shù)時,如果含有Kotlin關(guān)鍵字,必須增加 反引號 ``

public Object object;
//使用kotlin中關(guān)鍵字命名的方法
public void is() {

}

Kotlin中調(diào)用

?testJava.`is`()
?testJava.`object`

三、Kt調(diào)用Java-SAM轉(zhuǎn)換

在Kotlin中調(diào)用帶有接口參數(shù)的方法時,如果這個接口只有一個方法,那么就可以通過 lambda 表達式實現(xiàn) SAM轉(zhuǎn)換,從而簡化我們的代碼。

示例如下:

public class TestJavaSam {
??
? ? void singleFun(@NotNull IListener iListener) {}

? ? void noParameter( @NotNull IListener iListener,int sum) {}

? ? void noParameterClean(int sum,@NotNull IListener iListener) {}
}

interface IListener {
? ? void onClick();
}

在Kotlin中調(diào)用

fun main() {
? ? val sam = TestJavaSam()
? ? sam.singleFun {

? ? }
? ? sam.noParameter({
?? ??? ??? ?//如果更改一下java方法參數(shù)的順序,那么就會更簡潔,如下
? ? },123)
? ? sam.noParameterClean(123){

? ? }
}

四、Kt中禁止Java調(diào)用某方法

@JvmSynthetic

Kotlin中,有些方法并不想暴露給Java調(diào)用,這時就可以增加這個注解在方法上。

@JvmSynthetic
fun toMain() {

}

此時toMain() 在Java中將無法調(diào)用到。

五、Java調(diào)用Kt-擴展函數(shù)

@file:JvmName(“xx”)

在java中使用Kotlin的擴展函數(shù)時,我們都會使用相應(yīng)的類名+Kt 去調(diào)用相關(guān)的方法,有時候我們想自定義相應(yīng)的工具類,就顯得稍顯麻煩,如下:

比如我們有一個頂級擴展函數(shù),位于 UiExpand.kt 中:

fun Int.px() {}

**Java中調(diào)用 **

? //Java調(diào)用kotlin類-(UiExpand)-Int.px() 擴展方法
? UiExpandKt.px(20);

如上所示,在Java中調(diào)用時,我們必須已文件名+kt后綴才可以調(diào)用。

通過給 UiExpand.kt 包名上增加 @file:JvmName(“Ui”),我們就可以實現(xiàn)自定義生成的類名去調(diào)用

如下:

Ui.px()

六、Java調(diào)用kt-成員變量

@JvmField

在Java中,我們?nèi)フ{(diào)用Kotlin 的 成員變量 時,編譯器都會幫我們自動生成相應(yīng)的 get,set方法,這很符合Java Bean的寫法,但是有些是有我們只是想直接去調(diào)用,這個時候就可以這樣去做。

Kotlin

data class TestKotlinBean(
? @JvmField val message: String,?
? @JvmField val title: String)

**Java中調(diào)用 **

?TestKotlinBean testKotlinBean = new TestKotlinBean("","");
?String message = testKotlinBean.message;
?String title = testKotlinBean.title;

當(dāng)然對于 如下的示例,就算不用增加上面的注解,在java也都是可以直接調(diào)用,免除get,set。

lateinit var sum: String

object UserPicCache{
? ? ? ? const val KEY_CACHE = "CACHE"
?}

@get:JvmName,@set:JvmName

有些時候,我們只是想讓其生成其中的一個set或者get方法,這個時候就可以使用上述注解。

Kotlin

data class TestKotlinBean(
? ? @set:JvmName("setMessage")
? ? var message: String,
? ? @get:JvmName("getTitle")
? ? val title: String
)

Java中調(diào)用:

?TestKotlinBean testKotlinBean = new TestKotlinBean("", "");
?testKotlinBean.setMessage("message");
?testKotlinBean.getTitle();

七、Java調(diào)用Kt-伴生對象

@JvmStatic

當(dāng)我們在Java中調(diào)用 Kotlin 伴生對象的方法或者變量時,必須通過 類名.Companion.xx 的方式才可以調(diào)用。這時候,我們就可以增加

@JvmStatic 來直接調(diào)用。

Kotlin

class Log {
? ? companion object {
? ? ? ? var time: String = ""
? ? ? ? fun toLog() {
? ? ? ? }
? ? }
}

在Java中調(diào)用:

?ToLog.toLog();
?ToLog.getTime();

不過需要注意的是,@JvmStatic 對性能沒有任何提升,因為相應(yīng)的,編譯器又生成了一個靜態(tài)方法,對于可變變量,會生成兩個靜態(tài)方法set,get。

八、Java調(diào)用Kt-方法默認參數(shù)值

@JvmOverloads

在Kotlin中,對于方法參數(shù),我們可能會加入一些默認值,便于更好的使用,但是在Java中,如果調(diào)用時不傳遞相應(yīng)的方法參數(shù),就會提示報錯,這種使用就可以使用@JvmOverloads 修飾方法。

kotlin

object DialogUtils {
? ? @JvmStatic
? ? @JvmOverloads
? ? fun showPromptDialog(title: String = "提示") {
? ? }
}

在java中調(diào)用

DialogUtils.showPromptDialog();
DialogUtils.showPromptDialog("標(biāo)題");

到此這篇關(guān)于Java與Kotlin互調(diào)原理的文章就介紹到這了,更多相關(guān)Java與Kotlin互調(diào)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot Mybatis 配置文件形式詳解

    SpringBoot Mybatis 配置文件形式詳解

    這篇文章主要介紹了SpringBoot Mybatis 配置文件形式詳解,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • SpringBoot整合RabbitMQ實現(xiàn)延遲隊列和死信隊列

    SpringBoot整合RabbitMQ實現(xiàn)延遲隊列和死信隊列

    RabbitMQ的死信隊列用于接收其他隊列中的“死信”消息,所謂“死信”,是指滿足一定條件而無法被消費者正確處理的消息,死信隊列通常與RabbitMQ的延遲隊列一起使用,本文給大家介紹了SpringBoot整合RabbitMQ實現(xiàn)延遲隊列和死信隊列,需要的朋友可以參考下
    2024-06-06
  • IDEA2020.2.3中創(chuàng)建JavaWeb工程的完整步驟記錄

    IDEA2020.2.3中創(chuàng)建JavaWeb工程的完整步驟記錄

    這篇文章主要給大家介紹了關(guān)于IDEA2020.2.3中創(chuàng)建JavaWeb工程的完整步驟,文中通過圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • java selenium 操作彈出窗口示例代碼

    java selenium 操作彈出窗口示例代碼

    本文主要介紹java selenium 操作彈出窗口,這里實例講解操作彈出窗口詳細流程,并附示例代碼,有需要的小伙伴可以參考下
    2016-08-08
  • Maven構(gòu)建忽略測試失敗的解決方案

    Maven構(gòu)建忽略測試失敗的解決方案

    這篇文章主要介紹了Maven構(gòu)建忽略測試失敗的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • JDBC獲取數(shù)據(jù)庫連接由淺入深

    JDBC獲取數(shù)據(jù)庫連接由淺入深

    大家好,本篇文章主要講的是JDBC獲取數(shù)據(jù)庫連接由淺入深,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • SpringBoot 中使用RabbtiMq?詳解

    SpringBoot 中使用RabbtiMq?詳解

    這篇文章主要介紹了SpringBoot 中使用RabbtiMq詳解,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價價值,需要的朋友可以參考一下
    2022-07-07
  • 解析JAVA深度克隆與淺度克隆的區(qū)別詳解

    解析JAVA深度克隆與淺度克隆的區(qū)別詳解

    本篇文章是對JAVA深度克隆與淺度克隆的區(qū)別進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • SpringBoot?實現(xiàn)動態(tài)添加定時任務(wù)功能

    SpringBoot?實現(xiàn)動態(tài)添加定時任務(wù)功能

    這篇文章主要介紹了SpringBoot?動態(tài)添加定時任務(wù),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • 使用Spring Boot搭建Java web項目及開發(fā)過程圖文詳解

    使用Spring Boot搭建Java web項目及開發(fā)過程圖文詳解

    這篇文章主要介紹了使用Spring Boot搭建Java web項目及開發(fā)過程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06

最新評論

浮山县| 巫山县| 兴山县| 页游| 荥阳市| 大悟县| 玉林市| 布拖县| 安新县| 嘉义县| 类乌齐县| 陵川县| 山阴县| 大港区| 怀仁县| 成安县| 比如县| 廉江市| 义乌市| 额敏县| 永州市| 绥中县| 新源县| 庆云县| 红桥区| 揭东县| 朝阳县| 浦北县| 通化县| 大关县| 垦利县| 靖边县| 诏安县| 股票| 巴东县| 阜新市| 北海市| 康乐县| 海林市| 十堰市| 北辰区|