kotlin改善java代碼實(shí)例分析
序
本文主要舉幾個(gè)kotlin如何改善java代碼的例子
字符串字面值及模板
字符串字面值
@Test fun testStringLiterals(){ val a = """if(a > 1) { | return a |}""".trimMargin() println(a) val b = """Foo Bar""".trimIndent() println(b) }
有了字符串字面值,寫(xiě)sql啥的就不用那么費(fèi)勁拼接字符串了
字符串模板
@Test fun testStringTemplate() { val name = "hello kotlin" println("Hello, $name!"); val data = listOf(1,2,3) println("Hello, ${data[0]}!") }
這個(gè)字符串模板更是強(qiáng)大,相當(dāng)于內(nèi)置一個(gè)freemarker,而且都不用手工傳遞變量值
for循環(huán)中獲取當(dāng)前index
@Test fun testForEachIndex(){ val items = listOf("apple", "banana", "kiwifruit") for (index in items.indices) { println("item at $index is ${items[index]}") } }
在java里頭for each循環(huán)要得到index,就得在外面聲明下index,自己統(tǒng)計(jì),太別扭了
data class
//生成getter/setter,equals,hashcode,toString,copy等 //setter是var變量才有 data class Customer(val name: String, val email: String) @Test fun testDataClass(){ val customer = Customer("admin","admin@admin.com") println(customer) }
java總是要聲明getter/setter,好處是可以在IDE查找那些方法有調(diào)用getter/setter;
lombok雖然可以自動(dòng)生成getter/setter,@Data注解也可以生成equal/hashcode方法,但是lombok不方便在IDE查找那些方法有調(diào)用getter/setter;kotlin的data class幫你解決這些問(wèn)題
Null Safety
@Test fun testIfNotNull(){ val files = File("Test").listFiles() println(files?.size) //null } @Test fun testIfNotNullAndElse(){ val files = File("Test").listFiles() println(files?.size ?: "empty") }
這個(gè)Null Safety太有用了,比起java的三元表達(dá)式更簡(jiǎn)潔一點(diǎn),在表達(dá)式為true的時(shí)候就不用重復(fù)寫(xiě)要返回的內(nèi)容,只要寫(xiě)else部分。
Null Safety在流式/鏈?zhǔn)秸{(diào)用的時(shí)候更有用
// 如果 `person` 或者 `person.department` 其中之一為空,都不會(huì)調(diào)用該函數(shù): person?.department?.head = managersPool.getManager()
小結(jié)
本文只是舉了kotlin可以改善java代碼的幾個(gè)例子,kotlin太強(qiáng)大了,目標(biāo)是要替代java。其中很多設(shè)計(jì)可以看到scala的影子,但是黑魔法也比較多,學(xué)習(xí)曲線(xiàn)稍微有點(diǎn)抖,不過(guò)如果不使用太高級(jí)的語(yǔ)法,也還OK。
相關(guān)參考:https://www.kotlincn.net/docs/reference/
相關(guān)文章
java WSDL接口webService實(shí)現(xiàn)方式
這篇文章主要為大家詳細(xì)介紹了java WSDL接口webService實(shí)現(xiàn)方式的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04idea啟動(dòng)多個(gè)服務(wù)不顯示Services或者RunDashboard窗口的處理方法
這篇文章主要介紹了idea啟動(dòng)多個(gè)服務(wù)不顯示Services或者RunDashboard窗口,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Eclipse查看開(kāi)發(fā)包jar里源代碼的方法
這篇文章主要介紹了Eclipse查看開(kāi)發(fā)包jar里源代碼的方法的相關(guān)資料,需要的朋友可以參考下2017-07-07Java Web開(kāi)發(fā)入門(mén)書(shū)籍實(shí)例解析(總結(jié)一)
從事Java Web開(kāi)發(fā)這一段時(shí)間來(lái),對(duì)Java 面向?qū)ο蟮乃枷牒蚆VC開(kāi)發(fā)模式可以說(shuō)已經(jīng)熟悉了。我當(dāng)前參與的項(xiàng)目使用的框架是Spring、SpringMVC、Hibernate。下面腳本之家小編給大家整理一篇教程幫助大家學(xué)習(xí)javaweb相關(guān)知識(shí),感興趣的朋友可以參考下2016-03-03淺談java Properties類(lèi)的使用基礎(chǔ)
下面小編就為大家分享一篇淺談java Properties類(lèi)的使用基礎(chǔ),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01