Kotlin反射(5)調用屬性

??通過反射調用屬性需要 KProperty 實例搜锰。KProperty 實例可以通過兩種方式獲得:一種是屬性引用分蓖;另一種是通過 KClass 提供的 API 獲得 KProperty 實例。

  • 通過反射調用屬性的示例如下:
class Person(var name: String, var age: Int) {    // 1??
    fun setNameAndAge(name: String, age: Int) {
        this.name = name
        this.age = age
    }

    override fun toString(): String {
        return "Person [name=$name, age=$age]"
    }
}

val count = 100    // 2??

fun main(args: Array<String>) {
    val clz = Person::class
    clz.memberProperties.forEach { println(it.name) }    // 3??
    // Person構造函數引用
    val personCtor = ::Person
    // 創(chuàng)建Person實例
    val person = personCtor.call("小三", 18)
    // 獲得第一個屬性
    val prop1 = clz.memberProperties.first()    // 4??
    println(prop1.get(person))

    // 引用頂層屬性
    val propCount = ::count    // 5??
    // 讀取count屬性
    println(propCount.get())    // 6??

    // 引用成員屬性name
    val propName = Person::name    // 7??
    // 寫入成員屬性name
    propName.set(person, "小五")    // 8??
    // 讀取成員屬性name
    println(propName.get(person))    // 9??
    // 引用成員屬性age
    val propAge = Person::age
    // 寫入成員屬性age
    propAge.set(person, 20)
    // 讀取成員屬性name
    println(propAge.get(person))
}

運行結果:

age
name
18
100
小五
20

Process finished with exit code 0

??代碼第1??行聲明 Person 類,它有一個主構造函數阀趴。代碼第2??行聲明頂層屬性 count。代碼第3??行中的 memberProperties 屬性可以獲得 Person 類所有的屬性集合苍匆。代碼第4??行獲得屬性集合中的第一個元素刘急。

??代碼第5??行是獲得頂層屬性 count 引用,它是一個只讀屬性浸踩,獲得屬性是通過 get 函數實現的叔汁,見代碼第6??行,由于是頂層屬性检碗,所以 get 函數沒有參數据块。代碼第7??行是獲得成員屬性 name 引用,它是可讀寫屬性折剃。代碼第8??行 set 函數是寫入 name 屬性另假,set 函數的第一個參數是 person 實例,第二個參數是要寫入的數值怕犁。代碼第9??行 get 函數是讀取 name 屬性边篮,參數是 person 實例。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末奏甫,一起剝皮案震驚了整個濱河市戈轿,隨后出現的幾起案子,更是在濱河造成了極大的恐慌阵子,老刑警劉巖思杯,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異挠进,居然都是意外死亡色乾,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門领突,熙熙樓的掌柜王于貴愁眉苦臉地迎上來暖璧,“玉大人,你說我怎么就攤上這事攘须∑嶙玻” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵于宙,是天一觀的道長浮驳。 經常有香客問我,道長捞魁,這世上最難降的妖魔是什么至会? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮谱俭,結果婚禮上奉件,老公的妹妹穿的比我還像新娘。我一直安慰自己昆著,他們只是感情好县貌,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凑懂,像睡著了一般煤痕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上接谨,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天摆碉,我揣著相機與錄音,去河邊找鬼脓豪。 笑死巷帝,一個胖子當著我的面吹牛,可吹牛的內容都是我干的扫夜。 我是一名探鬼主播楞泼,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼历谍!你這毒婦竟也來了现拒?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤望侈,失蹤者是張志新(化名)和其女友劉穎印蔬,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體脱衙,經...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡侥猬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了捐韩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片退唠。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖荤胁,靈堂內的尸體忽然破棺而出瞧预,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布垢油,位于F島的核電站盆驹,受9級特大地震影響,放射性物質發(fā)生泄漏滩愁。R本人自食惡果不足惜躯喇,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望硝枉。 院中可真熱鬧廉丽,春花似錦、人聲如沸妻味。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽责球。三九已至蔑匣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間棕诵,已是汗流浹背裁良。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留校套,地道東北人价脾。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像笛匙,于是被迫代替她去往敵國和親侨把。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內容

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學習記錄文檔妹孙,今天18年5月份再次想寫文章秋柄,發(fā)現簡書還為我保存起的...
    Jenaral閱讀 2,732評論 2 9
  • ??面向對象(Object-Oriented骇笔,OO)的語言有一個標志,那就是它們都有類的概念嚣崭,而通過類可以創(chuàng)建任意...
    霜天曉閱讀 2,093評論 0 6
  • 第3章 基本概念 3.1 語法 3.2 關鍵字和保留字 3.3 變量 3.4 數據類型 5種簡單數據類型:Unde...
    RickCole閱讀 5,097評論 0 21
  • 要點: 函數式編程:注意不是“函數編程”笨触,多了一個“式” 模塊:如何使用模塊 面向對象編程:面向對象的概念、屬性雹舀、...
    victorsungo閱讀 1,466評論 0 6
  • 鐵凝在魯迅文學院講話時芦劣,曾經講過這樣的話,已經過去幾年了说榆,原話我記不清了虚吟,但大概意思還深深的印在腦海里寸认。 她說,時...
    英莫問閱讀 1,873評論 17 66