日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Kotlin】扩展属性 ( 扩展变量属性 | 扩展常量属性 | 注意事项 | 本质分析 )

發(fā)布時(shí)間:2025/6/17 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Kotlin】扩展属性 ( 扩展变量属性 | 扩展常量属性 | 注意事项 | 本质分析 ) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

        • I . 擴(kuò)展屬性 總結(jié)
        • II . 擴(kuò)展屬性 定義格式
        • III . 擴(kuò)展屬性 標(biāo)準(zhǔn)示例
        • IV . 擴(kuò)展屬性 注意事項(xiàng)
        • V . 擴(kuò)展屬性 本質(zhì)分析
        • VI . 擴(kuò)展屬性 代碼示例解析



I . 擴(kuò)展屬性 總結(jié)



擴(kuò)展屬性 總結(jié) :


① 修飾 : 變量擴(kuò)展屬性使用 var 修飾 , 常量擴(kuò)展屬性使用 val 修飾 ;

② 屬性訪問器定義 : 變量屬性必須定義 get 和 set 屬性訪問器方法 , 常量屬性必須定義 get 屬性訪問器方法 ;

③ 注意事項(xiàng) : 擴(kuò)展屬性沒有幕后字段 , 沒有初始化器 , 必須定義屬性訪問器 ;

④ 擴(kuò)展屬性本質(zhì) : 擴(kuò)展屬性沒有在內(nèi)存中分配字段保存該屬性 , 其本質(zhì)是一個(gè)經(jīng)過計(jì)算得出的值 , 擴(kuò)展變量屬性相當(dāng)于擴(kuò)展了兩個(gè)屬性訪問器方法 ;



II . 擴(kuò)展屬性 定義格式



1 . 擴(kuò)展變量屬性定義格式 : 擴(kuò)展的變量屬性 , 使用 var 修飾屬性 , 必須定義 get / set 屬性訪問器方法 ;

var 接收者類型.擴(kuò)展屬性名稱 : 擴(kuò)展屬性類型get(){}set(value){}

2 . 擴(kuò)展常量屬性定義格式 : 擴(kuò)展的變量屬性 , 使用 val 修飾 , 必須定義 get 方法 , 必須不能定義 set 方法 ;

val 接收者類型.擴(kuò)展屬性名稱 : 擴(kuò)展屬性類型get(){}

III . 擴(kuò)展屬性 標(biāo)準(zhǔn)示例



擴(kuò)展屬性要素 :


1 . 修飾符 : 使用 var 修飾擴(kuò)展的變量屬性 , 使用 val 修飾擴(kuò)展的常量屬性 ;

2 . 屬性訪問器定義 : 變量必須定義 getter 和 setter 屬性訪問器 , 常量擴(kuò)展屬性只能且必須定義 getter 方法 ;

open class Student {var name : String = "Tom"var age : Int = 18 }//擴(kuò)展變量屬性 Student.olderAge : Intget() {return this.age + 1}set(value) {this.age = value - 1}//擴(kuò)展常量屬性 val Student.nameAndage : Stringget() {return "${this.name} : ${this.age}"}

IV . 擴(kuò)展屬性 注意事項(xiàng)



1 . 沒有幕后字段 : 不管是擴(kuò)展函數(shù) , 還是擴(kuò)展屬性 , 都沒有將擴(kuò)展的成員加入到類中 , 擴(kuò)展屬性沒有 幕后字段 ;


2 . 不能有屬性初始化器 : 擴(kuò)展屬性由于沒有幕后字段 , 因此不能定義屬性的初始化器 , 給擴(kuò)展屬性定義初始化器有如下報(bào)錯(cuò)信息 Extension property cannot be initialized because it has no backing field ;


3 . 擴(kuò)展屬性初始化問題 : 擴(kuò)展屬性沒有初始化器 , 那么就必須處理初始化問題 , 必須定義其 get / set 訪問器方法 ;


4. 擴(kuò)展屬性不能保存值 : 擴(kuò)展屬性沒有幕后字段不能保存實(shí)際的字段值 , 其屬性訪問器中只能調(diào)用對(duì)象中的屬性和方法 , 不能調(diào)用擴(kuò)展屬性本身 , 會(huì)棧溢出 ;



V . 擴(kuò)展屬性 本質(zhì)分析



1 . 沒有實(shí)際字段字段 : 擴(kuò)展屬性并不是一個(gè)實(shí)際的屬性 , 沒有幕后字段 , 不能存儲(chǔ)一個(gè)新的字段值 ;


2 . 擴(kuò)展屬性可訪問內(nèi)容 : 擴(kuò)展屬性的屬性訪問器中只能調(diào)用接收者類型對(duì)象中的其它成員 , 不能調(diào)用擴(kuò)展屬性本身 ;


3 . 本質(zhì)是擴(kuò)展函數(shù) : 擴(kuò)展屬性本質(zhì)相當(dāng)于定義了屬性訪問器方法 , 在該方法中可以對(duì)擴(kuò)展的接收者類對(duì)象進(jìn)行各種操作 , 其本質(zhì)是擴(kuò)展了兩個(gè)函數(shù) ( get / set 屬性訪問器 ) ;



VI . 擴(kuò)展屬性 代碼示例解析



擴(kuò)展屬性代碼示例解析 :


1 . olderAge 擴(kuò)展屬性 : 該屬性是 var 修飾的擴(kuò)展的變量屬性 , 必須定義該屬性的 get 和 set 屬性訪問器 ;


2 . olderAge 擴(kuò)展屬性的本質(zhì) :


① 沒有為 olderAge 屬性分配內(nèi)存 : 在內(nèi)存中是沒有準(zhǔn)備任何字段來存儲(chǔ)這個(gè)值的 , 因此實(shí)際上在內(nèi)存中是沒有為該值分配內(nèi)存空間 ;

② 屬性訪問器可訪問內(nèi)容 : 只能通過調(diào)用 Student 接收者類型對(duì)象中的成員屬性 , 成員方法 , 或定義局部變量 ;

③ 擴(kuò)展屬性本質(zhì) : 使用上述可訪問內(nèi)容 , 經(jīng)過計(jì)算模擬生成一個(gè)屬性 , 這里模擬的屬性就是比 Student 對(duì)象的 age 大一歲的 年齡屬性 ;


3 . nameAndage 擴(kuò)展屬性 : 是一個(gè)常量 , 使用 val 修飾 , 因此其只能定義 get 屬性訪問方法 , 其本質(zhì)與上面的變量本質(zhì)相同 , 內(nèi)存中沒有實(shí)際值 , 是一個(gè)經(jīng)過運(yùn)算生成的值 ;


4 . 擴(kuò)展屬性 代碼示例 :

open class Student {var name : String = "Tom"var age : Int = 18 }/*擴(kuò)展屬性并不是添加了一個(gè)屬性沒有額外擴(kuò)展一個(gè)存儲(chǔ)任何值的字段可以利用原來的類模擬生成一個(gè)字段本質(zhì)是 : 為該接收者類擴(kuò)展了兩個(gè)方法該擴(kuò)展的屬性意義是 , 定義了一個(gè)屬性 , 比類中的年齡大一歲*/ var Student.olderAge : Intget() {//擴(kuò)展屬性的訪問器中 , 可以訪問任何接收者類對(duì)象中的屬性和方法// 絕對(duì)不能訪問該屬性本身 , 會(huì)造成遞歸溢出return this.age + 1}set(value) {this.age = value - 1}//擴(kuò)展常量屬性 val Student.nameAndage : Stringget() {return "${this.name} : ${this.age}"}fun main() {var student : Student = Student()student.olderAge = 18//18println(student.olderAge)//Tom : 17println(student.nameAndage) }

5 . 執(zhí)行結(jié)果 :

18 Tom : 17

總結(jié)

以上是生活随笔為你收集整理的【Kotlin】扩展属性 ( 扩展变量属性 | 扩展常量属性 | 注意事项 | 本质分析 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。