Kotlin常用注解參數(shù)解析

  • JvmField (用來(lái)修飾屬性)
    使用jvmField注解,使得Kotlin編譯器不再對(duì)屬性字段生成getter/setter
class JvmFieldBean{
    var name:String?=null
    @JvmField var age:Int? =null
}

class Test{
    public static void main(String[] args){
        JvmFieldBean bean = new JvmFieldBean();
        bean.setName("aaaa");//訪問(wèn)屬性只能通過(guò)setter和getter方法
        bean.age = 20;//age可見(jiàn)性為public同時(shí)沒(méi)有生成setter和getter方法
    }
}
 

故對(duì)應(yīng)的java代碼為:

class JvmFieldBean{
    private String name;
    public int age;
    
    public void setName(String name){
        this.name = name;
    }

    public String getName(){
      return name;
    }
}
  • JvmName
    使用JvmName來(lái)告訴編譯器生成的java類或者方法的名稱
@file:JvmName("JvmNameTest")

package com.today07

var name: String? = null
    @JvmName("setUserName")
    set(value) {
        field = value
    }

@JvmName("getInfos")
fun getInfo() {

}

class Test{
    public static void main(String[] args){
        JvmNameTest.setUserName("aaaa");//設(shè)置name屬性值只能通過(guò)setUserName方法
        JvmNameTest.getName();//獲得該屬性的值
        JvmNameTest.getInfos();//調(diào)用發(fā)現(xiàn)沒(méi)有g(shù)etInfo的方法
    }
}

故對(duì)應(yīng)的java代碼為:

class JvmNameTest{
    private static String name;

    public static void setUserName(String name){
        this.name = name;
    }

    public static String getName(){
        return name;
    }

    public static void getInfos(){}
}
  • JvmMultifileClass
    該注解指示編譯器生成一個(gè)多文件類凝果,其中包含在此文件中聲明的頂級(jí)功能和屬性作為其一部分淤堵,相應(yīng)的多文件類名稱由JvmName指定
@file:JvmName("Utils")
@file:JvmMultifileClass

package com.today07

 var fieldA: String? = null
fun getA(): String {
    return "this is A"
}

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

package com.today07

fun getB(): String {
    return "this is B"
}

class Test{
    public static void main(String[] args){
        Utils.getFieldA();
        Utils.getA();
        Utils.getB();
    }
}

故對(duì)應(yīng)的java代碼為:

class Utils{
    private static String fieldA;
  
    public static String getFieldA(){
        return fieldA
    }

    public static void setFieldA(String fieldA){
        this.fieldA = fieldA;
    }

    public static void getA(){}

    public static void getB(){}
}
  • JvmOverloads
    告訴Kotlin編輯器為此函數(shù)生成替換參數(shù)值的重載
  @file:JvmName("JvmOverloadTest")
package com.today07

@JvmOverloads
fun getInfo(name: String, age: Int = 10):String{
    return "name:$name age:$age"
}

class Test{
    public static void main(String[] args){
        JvmOverloadTest.getInfo("aaaa");
        JvmOverloadTest.getInfo("bbbb",20);
    }
}

故對(duì)應(yīng)的java代碼為:

class JvmOverloadTest{
      public static String getInfo(String name){
          this(name,10)
      }
      
      public static String getInfo(String name,int age){
            return "name:$name age:$age"
      }
}
  • JvmStatic
    該注解只能在object或者Companion object中使用
    對(duì)于函數(shù)使用該注解抚垃,Kotlin編譯器將生成另一個(gè)靜態(tài)方法
    對(duì)于屬性使用該注解迎吵,Kotlin編輯將生成其他的setter和getter方法
    這個(gè)注解的作用其實(shí)就是消除java調(diào)用Kotlin的companion object對(duì)象時(shí)不能直接調(diào)用其靜態(tài)方法和屬性的問(wèn)題氨距。
package com.today07

object ObjectTest {
    val name:String? =null
    @JvmStatic
    var age:String? =null
    @JvmField
    var sex:Boolean? =null
    fun getTest(){}

    @JvmStatic
    fun getTestB(){

    }
}

class Test{
    public static void main(String[] args){
        ObjectTest.INSTANCE.getTest();
        ObjectTest.getTestB();
        ObjectTest.INSTANCE.getName();
        ObjectTest.getAge();
        ObjectTest.sex = false;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末屋吨,一起剝皮案震驚了整個(gè)濱河市蜒谤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌至扰,老刑警劉巖鳍徽,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異敢课,居然都是意外死亡阶祭,警方通過(guò)查閱死者的電腦和手機(jī)绷杜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)濒募,“玉大人鞭盟,你說(shuō)我怎么就攤上這事∪龋” “怎么了懊缺?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)培他。 經(jīng)常有香客問(wèn)我鹃两,道長(zhǎng),這世上最難降的妖魔是什么舀凛? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任俊扳,我火速辦了婚禮,結(jié)果婚禮上猛遍,老公的妹妹穿的比我還像新娘馋记。我一直安慰自己,他們只是感情好懊烤,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布梯醒。 她就那樣靜靜地躺著,像睡著了一般腌紧。 火紅的嫁衣襯著肌膚如雪茸习。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,046評(píng)論 1 285
  • 那天壁肋,我揣著相機(jī)與錄音号胚,去河邊找鬼。 笑死浸遗,一個(gè)胖子當(dāng)著我的面吹牛猫胁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播跛锌,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼弃秆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了察净?” 一聲冷哼從身側(cè)響起驾茴,我...
    開(kāi)封第一講書(shū)人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎氢卡,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體晨缴,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡译秦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筑悴。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡们拙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出阁吝,到底是詐尸還是另有隱情砚婆,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布突勇,位于F島的核電站装盯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏甲馋。R本人自食惡果不足惜埂奈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望定躏。 院中可真熱鬧账磺,春花似錦、人聲如沸痊远。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)碧聪。三九已至冒版,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間矾削,已是汗流浹背壤玫。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哼凯,地道東北人欲间。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像断部,于是被迫代替她去往敵國(guó)和親猎贴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345