官术网_书友最值得收藏!

2.2.2 屬性

聲明屬性的完整語法如下:

     var <propertyName>[: <PropertyType>] [= <property_initializer>]
       [<getter>]
       [<setter>]

var聲明的屬性可以有g(shù)etter和setter方法,val聲明的屬性只能有g(shù)etter方法。

例如,在實(shí)際開發(fā)中,網(wǎng)絡(luò)請(qǐng)求返回的Response大多采用如下形式:

對(duì)于調(diào)用HTTP接口,開發(fā)者經(jīng)常需要封裝一個(gè)基類的HttpResponse,用于表示接口返回的內(nèi)容。下面的HttpResponse還額外定義了一個(gè)isOkStatus屬性。

HttpResponse是一個(gè)范型類,它的屬性isOkStatus用于判斷接口調(diào)用是否成功。

另外,HttpResponse還是一個(gè)數(shù)據(jù)類(Data Class)。Data Class類似于Java Bean,它只包含一些數(shù)據(jù)字段,編譯器能夠自動(dòng)生成屬性的getter、setter。2.3.3小節(jié)會(huì)詳細(xì)介紹Data Class。

幕后字段(backing field)

backing field是Kotlin屬性自動(dòng)生成的字段,它只能在當(dāng)前屬性的訪問器(getter、setter)內(nèi)部使用。另外,Kotlin的擴(kuò)展屬性不能使用backing field。

為何需要幕后字段?我們先來看一段代碼:

當(dāng)我們嘗試獲取paramValue的值時(shí),上述代碼會(huì)以遞歸的方式調(diào)用getter。類似地,當(dāng)我們嘗試設(shè)置paramValue的值時(shí),它會(huì)以遞歸的方式調(diào)用相同的setter。

雖然Kotlin的類并沒有field,但是Kotlin為每個(gè)屬性提供了一個(gè)自動(dòng)的backing field,可以使用field進(jìn)行訪問,便于在使用getter、setter時(shí)替換變量。

需要再一次強(qiáng)調(diào),backing field只能在當(dāng)前屬性的訪問器內(nèi)使用。

最后,Kotlin的屬性還包括內(nèi)聯(lián)屬性、擴(kuò)展屬性、委托屬性。這些屬性的使用會(huì)在后續(xù)的章節(jié)中詳細(xì)介紹。

主站蜘蛛池模板: 饶平县| 蒙自县| 安庆市| 琼结县| 烟台市| 瓮安县| 三门县| 井陉县| 句容市| 寿阳县| 甘泉县| 阿拉善右旗| 壤塘县| 阿克陶县| 九江县| 岳阳县| 建水县| 东明县| 三原县| 泾川县| 革吉县| 中西区| 景宁| 绥芬河市| 白城市| 七台河市| 新郑市| 花莲县| 六枝特区| 阿坝县| 辽中县| 井陉县| 红原县| 池州市| 彰化市| 迁安市| 新宁县| 福清市| 成安县| 淮南市| 泸州市|