分析Kotlin和Java EE的關(guān)系
推薦 + 挑錯(cuò) + 收藏(0) + 用戶評(píng)論(0)
本文分析了Kotlin和Java EE的關(guān)系,討論了如何利用Kotlin的運(yùn)算符,可空性和可選項(xiàng)來優(yōu)化轉(zhuǎn)換的效果。
將Java EE應(yīng)用程序轉(zhuǎn)換為Kotlin開始于框架的戰(zhàn)斗,我們成功地超越了java老標(biāo)準(zhǔn)設(shè)置的所有障礙。在此過程中,新時(shí)代語言Kotlin特定的構(gòu)造,使的代碼更簡(jiǎn)潔而安全。
如果您沒有閱讀本系列的前兩部分,可以在這里找到:
Kotlin和Java EE:第一部分 - 從Java到Kotlin(https://dzone.com/articles/kotlin-jee-part-one-from-java-to-kotlin)
Kotlin和Java EE:第二部分 - 插件的樂趣(https://dzone.com/articles/kotlin-and-java-ee-part-2-having-fun-with-plugins)
經(jīng)過對(duì)前面兩部分的回顧及修改,這里補(bǔ)充最后一些內(nèi)容。
已有的轉(zhuǎn)換
前兩部分中的許多結(jié)構(gòu)已經(jīng)適用與Kotlin了。 下面我們來看看Set的定義:
由于Java不支持對(duì)象列表中的Set和其他集合的簡(jiǎn)單構(gòu)造,我們必須使用Arrays類來創(chuàng)建List,然后將其轉(zhuǎn)換為Set。Kotlin里就變成:
我們還將Java Bean轉(zhuǎn)換為Kotlin數(shù)據(jù)類,使得它們簡(jiǎn)潔了很多。去掉所有的getter和setter,并自動(dòng)得到了equals(),hashCode()和toString()。
這里要感謝編譯器插件,可以偽造不變的對(duì)象,而不需要無參數(shù)的構(gòu)造函數(shù):
用lateinit關(guān)鍵字處理那些由框架初始化的值更容易一些,可以避免不必要的空值檢查:
讓我們看看還有什么可以改進(jìn)的。
空值還是可選項(xiàng)?
這是一個(gè)非常棘手的問題。 Kotlin對(duì)可空值有很好的支持,當(dāng)您使用第三方庫(kù)時(shí),這很有幫助。問題是當(dāng)您有機(jī)會(huì)選擇一個(gè)時(shí),該使用什么?這是我們?cè)瓉淼腛ptional生產(chǎn)者和消費(fèi)者對(duì):
Kotlin解決方案將使用空值,所以變成:
空值可以出現(xiàn)在調(diào)用鏈的每個(gè)步驟中,因此您必須對(duì)所有調(diào)用使用問號(hào)。這解決了可空性問題,但它不漂亮。
然而,如果返回類型為Optional,結(jié)果為Optional.empty,則將略過該對(duì)象的所有未來單調(diào)調(diào)用,結(jié)果將為Optional.empty。對(duì)我來說,這看起來是一個(gè)更干凈的解決方案,如果您打算從Java調(diào)用Kotlin代碼,它也是一個(gè)更安全的解決方案。對(duì)于Java互操作,優(yōu)先于空值。
運(yùn)算符!
find, add , 和 delete是完全合法的方法名稱,但是不是使用運(yùn)算符更好呢?
MethodOperator
service.find(id)service[id]
service.add(kittenEntity)service += kittenEntity
我發(fā)現(xiàn)它不只是更短,而且更可讀,因?yàn)榇a不再是一大堆方法調(diào)用。小心只使用知名和易理解的操作符,否則,您將會(huì)遇到像Scala庫(kù)一樣大的混亂,然后您將需要一個(gè)操作符周期表。在數(shù)據(jù)存儲(chǔ)庫(kù)的情況下,類似MutableMap的接口工作得很好。請(qǐng)注意,我使用“plus assign”(+ =)運(yùn)算符來持久化一個(gè)實(shí)體,因?yàn)樵技习呀?jīng)擁有的內(nèi)容以及一個(gè)附加項(xiàng)。
以下是如何聲明它們:
您可能希望保留原始方法,并對(duì)操作符進(jìn)行包裝,因?yàn)樵挤椒梢杂蟹祷刂?,而某些操作符則不能返回值。其他類似的選項(xiàng)是是“remove”和“contains”方法,因?yàn)樗鼈兛梢杂谩癿inus assign”( - =)和Kotlin的in運(yùn)算符表示。其余的就留給你去探索。
結(jié)論
以慣用的方式寫Kotlin代碼的目的是要有更好的可讀性和更安全的代碼,我希望所提出的例子成功地實(shí)現(xiàn)了這一意圖。該系列僅顯示了幾種方法來改進(jìn)Java代碼,同時(shí)使某些部分保持不變。值得探索的特點(diǎn)是:擴(kuò)展函數(shù),如果可能的話何時(shí)擴(kuò)展,try/catch作為函數(shù)。探索一下,找出什么適合你的,玩得開心!
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%