了解kotlin,最先接觸的就是val跟var了,下面詳細(xì)說說這兩個(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í)說明了val的修飾的變量,只能賦值一次,后續(xù)無法再次賦值
如果我在前面加個(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方法沒有了
其實(shí)這種寫法,真的是非常的優(yōu)雅;
對(duì)于java來說,很多人聲明一個(gè)變量的時(shí)候,常常忘記加final修飾語,從而埋下了隱患,比如這個(gè)變量傳到其他方法中,或者再其他的使用中,不小心給他重新賦值,或者把這個(gè)變量置空,導(dǎo)致了其他不可預(yù)期的問題
但是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ò)的寫法,再后續(xù)的開發(fā)中,應(yīng)該盡量使用val修飾符 就像里面所說的
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ì)心的你有沒有注意到,set方法的參數(shù)有一個(gè)@NotNull的修飾符,還有一個(gè)Intrinsics.checkParameterIsNotNull(var1, "<set-?>")的方法
如果編譯期可以判斷是null,不小心傳了null,這里就會(huì)編譯不過,提示你修復(fù),如果編譯器判斷不了,避免錯(cuò)誤,在運(yùn)行的時(shí)候,也會(huì)直接崩潰來提示你
簡(jiǎn)簡(jiǎn)單單的一個(gè)修飾符,卻可以幫我們做這么多事情,是不是深深迷上了kotlin了
寫到這里,對(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
可以看出來,對(duì)應(yīng)的get跟set方法都變了
簡(jiǎn)簡(jiǎn)單單的val跟var,其實(shí)隱藏了很多信息,這里做個(gè)介紹 有任何疑問,歡迎微信交流