Java轉(zhuǎn)Kotlin原來如此簡單

程序員常用的IDEA插件:https://github.com/silently9527/Toolkit

變量

Kotlin聲明變量的關(guān)鍵字有兩個

  • val: 不可變引用鹤耍,相當(dāng)于java中final修飾的變量
  • var: 可變引用

舉例:

val name:String = "Herman";
val age = 20;

在這個例子中米诉,變量name明確指定了類型是String毙沾,變量age沒有指定類型,這兩種方式都正確挺峡,Kotlin的編譯器可以根據(jù)初始化的值推斷出age的類型,所以在定義變量的時候可以不用指定變量的類型

再看下面這個例子:

val age = 20
age = “Herman”

這里存在兩個問題導(dǎo)致編譯不通過:第一担钮,由于變量會被改變橱赠,需要改成var;第二箫津,在第一次賦值的時候編譯器推斷出age的類型應(yīng)該是Int狭姨,在修改的是時候就不能被賦值String

枚舉

枚舉的定義需要使用關(guān)鍵字 enum class, Kotlin中的枚舉和Java一樣可以擁有屬性和構(gòu)造方法

enum class Color(val r: Int = 0, val g: Int = 0, val b: Int = 0) {
    RED(255, 0, 0), GREEN(g = 255), BLUE(b = 255);

    fun sum() = r + g + b

    fun sum2(): Int {
        return r + g + b
    }
}

這里的枚舉Color的構(gòu)造方法有三個參數(shù)r,g,b,如果參數(shù)沒有傳默認(rèn)是0苏遥,然后再構(gòu)建對象的時候可以指定變量的名字賦值(在后面類相關(guān)的部分會再次出現(xiàn))饼拍;

定義了兩個方法sum,兩種寫法都支持

when

when語句類似于Java中的switch語句田炭,但用法會更多一些

fun getWarmth(color: Color) =
    when (color) {
        Color.RED, Color.GREEN -> "warm"
        Color.BLUE -> "cold"
    }
println(getWarmth(Color.BLUE))

與java中的switch只能支持枚舉师抄,數(shù)字,字符串诫肠,而when支持任意類型

上面的例子還可以改寫成不帶參數(shù)的寫法司澎,這種寫法每個分支條件就是布爾表達(dá)式(類似于java中的if-elseif)

fun getWarmth(color: Color) =
    when {
        color == Color.RED || color == Color.GREEN -> "warm"
        color == Color.BLUE -> "cold"
        else -> throw IllegalArgumentException()
    }

迭代

while的用法和Java相同

while(condition){

}

do{

}while(condition)

在Kotlin中引入了區(qū)間,var oneToTen=1..10這個表示1到10的區(qū)間,這個區(qū)間是閉合的,也就是說包含10

fun testFor() {
    for (i in 1..10) {
        print("$i,")
    }
}

由于區(qū)間是閉合的, 包含了10, 在實際情況下我們更常用是不包含, 可以使用until

fun testForUtil() {
    for (i in 'A' until 'F') {
        print("$i,")
    }
}

輸出結(jié)果: A,B,C,D,E,

上面的例子如果我們可以想要倒序輸出,步長2,可以是使用 downTo, step實現(xiàn)

fun testForDownTo() {
    for (i in 10 downTo 1 step 2) {
        print("$i,")
    }
}

下面我們想要迭代一個List, 同時還需要訪問List的index, for循環(huán)改如何寫

fun testForList() {
    val list = listOf("Herman", "herman7z.site")
    for ((index, value) in list.withIndex()) {
        println("index:$index, value:$value")
    }
}

迭代map, 同時訪問key,value

fun testForMap() {
    val map = TreeMap<Char, Int>();
    for (i in 'A' until 'F') {
        map[i] = i.code;
    }

    for ((key, value) in map) {
        println("key:$key, value:$value")
    }
}

in還可以用來判斷元素在集合和區(qū)間是否存在,println(1 in 1..10)

異常處理

在Java中需要區(qū)分受檢異常和不受檢異常, 比如IO操作的方法通過都會拋出IOException, 應(yīng)用程序必須要處理,這導(dǎo)致了很多模式代碼, 所以在Kotlin中不在區(qū)分受檢異常和不受檢異常,無需在方法后面trhow 異常.

另外try-catch語句依然可以像if-else語句一樣作為一個表達(dá)式, 最后一行就是表達(dá)式的返回值

fun testTryCatch() {
    val result = try {
        val i = 5 / 0;
    } catch (e: Exception) {
        0;
    }

    println(result)
}

上面的代碼運行時遇到了異常進(jìn)入到了catch分支, 最后一行是0, 所以result的結(jié)果就是0

字符串

在Java中我們想要使用字符串模版是通過String.format來實現(xiàn),接下來看Kotlin如何的字符串模版

val name = "Herman"
println("Hello, $name")

從上面的我們可以看出Kotlin的模版確實要更簡潔栋豫,直接使用$來引用變量挤安,如果想要在模版中輸出字符,需要使用轉(zhuǎn)義:`\`; 不僅如此丧鸯,在模版中來可以寫入一下邏輯判斷

val age = 10;
println("Hello, ${if(age>20) "Herman" else "Kotlin"}")

在Java中的String.split方法的參數(shù)是正則表達(dá)式,所以在執(zhí)行特殊的分隔符時主要轉(zhuǎn)義, Kotlin重載了這個方法

println("123.abc".split(".")) //這里的. 作為了普通字符串

輸出的結(jié)果

[1231, 12312]

當(dāng)我們需要使用正則表達(dá)式來分割是可以通過一下方式調(diào)用

println("123.abc".split("\\.".toRegex()))

這里使用了雙斜杠轉(zhuǎn)義操作, 也可以是三重引號來去掉轉(zhuǎn)義,看起來會更加直接

println("123.abc".split("""\.""".toRegex()))

原文鏈接: http://herman7z.site

最后(看完不點關(guān)注蛤铜,你們想白嫖我嗎)

文中或許會存在或多或少的不足、錯誤之處丛肢,有建議或者意見也非常歡迎大家在評論交流围肥。

最后,寫作不易蜂怎,請不要白嫖我喲穆刻,希望朋友們可以點贊評論關(guān)注三連,因為這些就是我分享的全部動力來源??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末杠步,一起剝皮案震驚了整個濱河市氢伟,隨后出現(xiàn)的幾起案子榜轿,更是在濱河造成了極大的恐慌,老刑警劉巖朵锣,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谬盐,死亡現(xiàn)場離奇詭異,居然都是意外死亡诚些,警方通過查閱死者的電腦和手機飞傀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诬烹,“玉大人砸烦,你說我怎么就攤上這事∫文” “怎么了外冀?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長掀泳。 經(jīng)常有香客問我雪隧,道長,這世上最難降的妖魔是什么员舵? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任脑沿,我火速辦了婚禮,結(jié)果婚禮上马僻,老公的妹妹穿的比我還像新娘庄拇。我一直安慰自己,他們只是感情好韭邓,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布措近。 她就那樣靜靜地躺著,像睡著了一般女淑。 火紅的嫁衣襯著肌膚如雪瞭郑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天鸭你,我揣著相機與錄音屈张,去河邊找鬼。 笑死袱巨,一個胖子當(dāng)著我的面吹牛阁谆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播愉老,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼场绿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了嫉入?” 一聲冷哼從身側(cè)響起裳凸,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤贱鄙,失蹤者是張志新(化名)和其女友劉穎劝贸,沒想到半個月后姨谷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡映九,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年梦湘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片件甥。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡捌议,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出引有,到底是詐尸還是另有隱情瓣颅,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布譬正,位于F島的核電站宫补,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏曾我。R本人自食惡果不足惜粉怕,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望抒巢。 院中可真熱鬧贫贝,春花似錦、人聲如沸蛉谜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽型诚。三九已至客燕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間俺驶,已是汗流浹背幸逆。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留暮现,地道東北人还绘。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像栖袋,于是被迫代替她去往敵國和親拍顷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容