
反引號(hào)(鍵盤左上角和波浪線在一起的符號(hào)) ``
在Kotlin中可以用反引號(hào)解決關(guān)鍵字沖突的問(wèn)題,可以強(qiáng)行將一個(gè)不合法的字符變?yōu)楹戏ā?/p>
fun `123`(){
println("this is message")
}
fun main(args: Array<String>) {
`123`();
}
例如,我們?cè)诿粋€(gè)函數(shù)名稱的時(shí)候其實(shí)是不能用數(shù)字開(kāi)頭的,必須以字母或者下劃線開(kāi)頭然后后面再跟數(shù)字才行。但是如果非要用數(shù)字開(kāi)頭,這時(shí)候就必須使用反引號(hào)來(lái)引用起數(shù)字,之后便可以使用了。
當(dāng)然一般情況下我們也不允許函數(shù)這么被命名,那么這時(shí)候我們?cè)谀切┣闆r下會(huì)用到這種方式呢?
我們知道在Kotlin中有一個(gè)關(guān)鍵字internal,被這個(gè)關(guān)鍵字修飾的函數(shù)可以被同一個(gè)module中任何方法調(diào)用。但是在Java又沒(méi)有這個(gè)修飾符,而且Java和Kotlin是100%兼容的,那么這個(gè)時(shí)候Java在調(diào)用這個(gè)函數(shù)的時(shí)候會(huì)把他當(dāng)成public來(lái)處理,這顯然不是我們想要的。那么該如何讓一些函數(shù)不能被Java調(diào)用呢?這個(gè)時(shí)候就可以使用反引號(hào)來(lái)引用一些Java中沒(méi)有特殊方法來(lái)處理這個(gè)問(wèn)題。
Kotlin對(duì)象的比較
我們知道在Java中“ == ”用來(lái)比較這兩個(gè)對(duì)象是否完全相同,而用equals來(lái)比較這兩個(gè)對(duì)象值是否一致。
而在Kotlin中是不需要去調(diào)用equals方法的。其默認(rèn)“ == ”就是java中的equals方法,而“ === ”即為java中的“ == ”。
也就是說(shuō)在Kotlin中“ == ”比較的是兩個(gè)對(duì)象的值是否相同,而“===”比較的是兩個(gè)對(duì)象是否相同。
類型鏈接 public typealias
typealias可以將B類映射到A類上,從而這個(gè)A類便具有了B類的特性。
fun main(args: Array<String>) {
var file:File = A("");
file.isFile;
}
public typealias A = File;
看到我們將File這個(gè)類賦值給了A這個(gè)類,于是A便有了File的一切特性。我們?cè)趍ain函數(shù)中可以用A去實(shí)例化產(chǎn)生對(duì)象file,通過(guò)A實(shí)例化的對(duì)象file可以調(diào)用File的一切方法。這便是typealisa的作用。
其實(shí)在Kotlin中有非常多的類都是通過(guò)typealisa去映射Java類從而得來(lái)得。比如Kotlin中的HashMap就是通過(guò)映射java中的HashMap得來(lái)的。為什么會(huì)這么做呢?個(gè)人認(rèn)為,這么做的話以后對(duì)kotlin中的HashMap進(jìn)行優(yōu)化可以直接在kotlin中處理,就不需要去對(duì)Java中的HashMap進(jìn)行兼容了。
如果覺(jué)得我的文章能夠幫助到你,也歡迎關(guān)注我的微信公眾號(hào)「晨雨細(xì)曲」,有新技術(shù)和知識(shí)會(huì)推送在這上面。