亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

教你一文搞懂Kotlin中的Jvm注解

 更新時間:2020年10月10日 16:29:29   作者:vivo祁同偉  
這篇文章主要介紹了教你一文搞懂Kotlin中的Jvm注解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

JvmOverloads

創(chuàng)建一個kotlin的類

class Student(val name: String, val sex: Int = 1, val age: Int = 18)

可以看出來 這個構(gòu)造函數(shù)的參數(shù)是有默認(rèn)值的,kotlin的特性對吧,我們在使用的時候可以方便的使用,比如:

 val student = Student("wuyue")
 val student2 = Student("wuyue", age = 18)

但是這個特性如果你用java來調(diào)用你就是失敗的了。

注意看下面的方法調(diào)用是報錯的,不能調(diào),只能選擇3個構(gòu)造函數(shù)的方法。

那我一定要讓java也可以調(diào)用 怎么辦? 加上注解即可:

class Student @JvmOverloads constructor(val name: String, val sex: Int = 1, val age: Int = 18)

這個對于android程序員來說還是很重要的,比如我們自定義view中 就需要這個注解,否則運行起來 會因為找不到方法而報錯的。

所以大家只要謹(jǐn)記一點: 當(dāng)你的kotlin代碼中的某個方法使用了 默認(rèn)參數(shù)值 這個kotlin語言的特性并且這個方法還要給java代碼調(diào)用的時候那你最好加上JvmOverloads 注解

JvmName

我們給String 增加一個擴展函數(shù) StringsHelper.kt 文件

package com.test
fun String.appendUserName():String{
  return this+"wuyue"
}

在java的世界里 怎么調(diào)用他呢?

StringsHelperKt.appendUserName("hello");

很好理解對吧, 但是很多人都習(xí)慣于在java的世界中 使用什么xxxUtils 去處理類似的情況。這個時候就要利用到這個JvmName了

@file:JvmName("StringsHelperUtils")
package com.test
fun String.appendUserName():String{
  return this+"wuyue"
}

如此一來 我們在java的世界中 調(diào)用他的方法就變成了

StringsHelperUtils.appendUserName("hello");

JvmMultifileClass

關(guān)于這個注解 網(wǎng)上的說法是 可以將2個kt文件 里面的代碼 合并到一個java的class文件中。

FunA.kt

@file:JvmName("Utils")
@file:JvmMultifileClass

package com.test

fun one(){

}

FunB.kt

@file:JvmName("Utils")
@file:JvmMultifileClass

package com.test

fun two(){

}

這樣在java世界中 調(diào)用Utils這個類 就有one和two 2個方法了,但是我自己的實驗結(jié)果 我就算去掉這個JvmMultifileClass 這個注解也一樣可以達(dá)到效果。似乎這個注解并沒有什么用? 可能是1.3之后的kotlin版本 優(yōu)化了 JvmName的實現(xiàn)吧。 這里有知道原因的大佬可以指點一下。

JvmField

還是前面這個Student的例子

class Student( val name: String, val sex: Int = 1, val age: Int = 18)

如果在java代碼里 你要調(diào)用他里面的屬性 只能通過get和set 來調(diào)用。 但是如果你加上注解

class Student(@JvmField val name: String, val sex: Int = 1, val age: Int = 18)

那他在java的世界中就可以 直接調(diào)用了

student.name="hello";

另外還有一個重要的作用是: 在kotlin中, val 并不意味著是常量,只不過val 聲明的變量 是沒有set方法的,只有g(shù)et方法。所以給了你一個常量的錯覺。 你要真正的 在kotlin中 定義一個常量,只有兩種方法:

  1. 在top-level或者object中 使用 const val
  2. 或者使用 @JvmField val(這種方式定義的就是常量了,講白了你也無法重寫val的get方法了)

JvmStatic

class StaticTest{
  companion object{

    const val field1="111"
    
    val field2="222"
    
    @JvmField val field3="333"

    fun callNonStatic(){

    }
    @JvmStatic
    fun callStatic(){

    }
  }
}

我們看一下 在java代碼中 怎么調(diào)用他們 就知道這個注解的實際作用了

  StaticTest.callStatic();
    StaticTest.Companion.callNonStatic();
    String t1 = StaticTest.field1;
    String t2=StaticTest.Companion.getField2();
    String t3=StaticTest.field3;

JvmSynthetic

這個注解用的不多,但是kotlin的許多官方庫會用到他 講白了 如果你寫的一個函數(shù)你只想給kotlin代碼調(diào)用 而不想給java的代碼調(diào)用 那你就在你的函數(shù)上面加上這個注解即可

例如:

@file:JvmName("StringsHelperUtils")
package com.test
@JvmSynthetic
fun String.appendUserName():String{
  return this+"wuyue"
}

這樣你就會發(fā)現(xiàn) 這個函數(shù) 你用kotlin正常使用 而java代碼里StringsHelperUtils 這個類 是沒有這個方法的

到此這篇關(guān)于教你一文搞懂Kotlin中的Jvm注解的文章就介紹到這了,更多相關(guān)Kotlin Jvm注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • kotlin使用Dagger2的過程全紀(jì)錄

    kotlin使用Dagger2的過程全紀(jì)錄

    Dagger2是一款基于Java注解,在編譯階段完成依賴注入的開源庫,主要用于模塊間解耦,方便進(jìn)行測試。下面這篇文章主要給大家介紹了關(guān)于kotlin使用Dagger2的過程的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • Android自定義輸入框提示功能

    Android自定義輸入框提示功能

    這篇文章主要為大家詳細(xì)介紹了Android自定義輸入框提示功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • Android Binder的原理與使用

    Android Binder的原理與使用

    這篇文章主要介紹了Android Binder的原理與使用,幫助大家更好的理解和學(xué)習(xí)使用Android開發(fā),感興趣的朋友可以了解下
    2021-04-04
  • Kotlin高階函數(shù)reduce與fold使用實例

    Kotlin高階函數(shù)reduce與fold使用實例

    Kotlin的高階函數(shù)reduce和fold可以用來對集合進(jìn)行聚合操作。reduce函數(shù)將集合元素逐個累加,而fold函數(shù)則可以指定一個初始值進(jìn)行累加。這兩個函數(shù)在處理大數(shù)據(jù)集時非常有用
    2023-04-04
  • android開機自啟動app示例分享

    android開機自啟動app示例分享

    這篇文章主要介紹了android開機自動啟動APP的方法,大家參考使用吧
    2014-01-01
  • Android客戶端與服務(wù)端交互

    Android客戶端與服務(wù)端交互

    這篇文章主要為大家詳細(xì)介紹了Android客戶端與服務(wù)端交互之登陸示例,感興趣的小伙伴們可以參考一下
    2016-02-02
  • 限時搶購秒殺系統(tǒng)架構(gòu)分析與實戰(zhàn)

    限時搶購秒殺系統(tǒng)架構(gòu)分析與實戰(zhàn)

    這篇文章主要介紹了限時搶購秒殺系統(tǒng)架構(gòu)分析與實戰(zhàn) 的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • Android常用的AlertDialog對話框及自定義對話框

    Android常用的AlertDialog對話框及自定義對話框

    本文主要介紹了android常用的AlertDialog對話框及自定義對話框的相關(guān)知識。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • 詳解Android冷啟動實現(xiàn)APP秒開的方法

    詳解Android冷啟動實現(xiàn)APP秒開的方法

    這篇文章給大家介紹的是Android冷啟動實現(xiàn)APP秒開的方法,對大家日常開發(fā)APP還是很實用的,有需要的可以參考借鑒。
    2016-08-08
  • 詳解Android 通過Socket 和服務(wù)器通訊(附demo)

    詳解Android 通過Socket 和服務(wù)器通訊(附demo)

    Android 通過Socket 和服務(wù)器通訊,是一種比較常用的通訊方式,這篇文章主要介紹了詳解Android 通過Socket 和服務(wù)器通訊,有興趣的可以了解一下。
    2016-12-12

最新評論