- Kotlin進(jìn)階實(shí)戰(zhàn)
- 沈哲 易龐宙編著
- 477字
- 2022-07-27 18:28:03
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ì)介紹。
- Spring Cloud Alibaba核心技術(shù)與實(shí)戰(zhàn)案例
- UML和模式應(yīng)用(原書第3版)
- Redis入門指南(第3版)
- PHP 7底層設(shè)計(jì)與源碼實(shí)現(xiàn)
- Apache Hive Essentials
- PHP網(wǎng)絡(luò)編程學(xué)習(xí)筆記
- Data Analysis with Stata
- ASP.NET 3.5程序設(shè)計(jì)與項(xiàng)目實(shí)踐
- PySide GUI Application Development(Second Edition)
- Android應(yīng)用案例開發(fā)大全(第二版)
- iPhone應(yīng)用開發(fā)從入門到精通
- Building Business Websites with Squarespace 7(Second Edition)
- iOS Development with Xamarin Cookbook
- Wearable:Tech Projects with the Raspberry Pi Zero
- MySQL數(shù)據(jù)庫教程(視頻指導(dǎo)版)