了解kotlin,最先接觸的就是val跟var了,下面詳細(xì)說(shuō)說(shuō)這兩個(gè)字段的特性
val
val:英文讀value,代表是immutable, 只讀的意思 比如下面這個(gè)kotlin代碼
val item = "I am val"
轉(zhuǎn)成對(duì)應(yīng)的java代碼如下
@NotNull
聲明了一個(gè)final的String母市,并且設(shè)置了一個(gè)get方法,確實(shí)說(shuō)明了val的修飾的變量损趋,只能賦值一次患久,后續(xù)無(wú)法再次賦值
如果我在前面加個(gè)private修飾符
private val name = "I am val"
對(duì)應(yīng)的java代碼
private final String name = "I am val";
可以發(fā)現(xiàn),對(duì)應(yīng)的get方法沒(méi)有了
其實(shí)這種寫(xiě)法浑槽,真的是非常的優(yōu)雅蒋失;
對(duì)于java來(lái)說(shuō),很多人聲明一個(gè)變量的時(shí)候桐玻,常常忘記加final修飾語(yǔ)篙挽,從而埋下了隱患,比如這個(gè)變量傳到其他方法中镊靴,或者再其他的使用中铣卡,不小心給他重新賦值,或者把這個(gè)變量置空偏竟,導(dǎo)致了其他不可預(yù)期的問(wèn)題
但是kotlin只需要一個(gè)val就可以快速實(shí)現(xiàn)這個(gè)特性煮落,很方便優(yōu)雅
這一點(diǎn),在java的圣經(jīng)《Effective Java》中踊谋,也有提及蝉仇,叫做:
Minimize mutability
Immutable classes are easier to design, implement, and use than mutable classes. They are less prone to error and are more secure.
所以使用val是一種更安全,更不容易出錯(cuò)的寫(xiě)法,再后續(xù)的開(kāi)發(fā)中轿衔,應(yīng)該盡量使用val修飾符 就像里面所說(shuō)的
var
var:英文讀variable沉迹,變量的意思,也就是指的mutable 比如下面這個(gè)kotlin代碼
var item = "I am var"
對(duì)應(yīng)的java代碼
@NotNull
var做了三件事
- 聲明了一個(gè)private變量
- 生成了對(duì)應(yīng)的get方法
- 生成了對(duì)應(yīng)的set方法
不知細(xì)心的你有沒(méi)有注意到害驹,set方法的參數(shù)有一個(gè)@NotNull的修飾符胚股,還有一個(gè)Intrinsics.checkParameterIsNotNull(var1, "<set-?>")的方法
如果編譯期可以判斷是null,不小心傳了null裙秋,這里就會(huì)編譯不過(guò),提示你修復(fù)缨伊,如果編譯器判斷不了摘刑,避免錯(cuò)誤,在運(yùn)行的時(shí)候刻坊,也會(huì)直接崩潰來(lái)提示你
簡(jiǎn)簡(jiǎn)單單的一個(gè)修飾符枷恕,卻可以幫我們做這么多事情,是不是深深迷上了kotlin了
寫(xiě)到這里谭胚,對(duì)于自動(dòng)生成的get方法跟set方法徐块,如果我們要自定義實(shí)現(xiàn),要怎么辦
可以用下面的方式
var name = "I am var"
需要注意的是灾而,kotlin的set方法胡控,取當(dāng)前的變量,是用field這個(gè)關(guān)鍵字
這個(gè)是對(duì)應(yīng)的java的代碼
@NotNull
可以看出來(lái)旁趟,對(duì)應(yīng)的get跟set方法都變了
簡(jiǎn)簡(jiǎn)單單的val跟var昼激,其實(shí)隱藏了很多信息,這里做個(gè)介紹 有任何疑問(wèn)锡搜,歡迎微信交流