溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用Kotlin來擴展

發布時間:2022-03-22 10:28:02 來源:億速云 閱讀:120 作者:iii 欄目:編程語言

今天小編給大家分享一下怎么使用Kotlin來擴展的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

怎么使用Kotlin來擴展

實際上客戶早在去年年初的時候便已經完成了他們的后端技術選型,而Kotlin在那個時候便已經成為了項目構建后端微服務的主要語言。所以在這些分享中我并沒能給出一個很好的答案,而這個問題本身也引起了我的思考。

首先我們看看Kotlin語言的特點,官方羅列了4個顯著的特點:

  • 簡潔 Consice

  • 安全 Safe

  • 友好的開發工具 Tool-friendly

  • 和Java的互操作性 Interoperable

簡潔 Concise

Kotlin的簡潔體現在很多方面,對于Java程序員來說,最直接的體現便是在Kotlin語法中直接省略了分號,并且在構造一個類的實例時省略了new關鍵字,下面便是一段標準的Kotlin代碼:

fun sayHi(name: String): String {     val sb = StringBuilder(str = "Hi ")     sb.append(name)     return sb.toString() }

讓我們再看一個Kotlin官網的示例代碼,來體會一下Kotlin的簡潔:

data class Customer(val name: String, val email: String, val company: String)

簡單的一行代碼便實現了一個包含了constructor以及默認getters, toString, equals,  hashCode和copy實現的Pojo,而同樣的java實現需要大概50多行代碼, 即便是在Lombok的幫助下仍然需要十幾行代碼。

Kotlin還在Java集合類的基礎上進行了封裝,并提供了非常豐富的集合操作。同時結合非常簡潔的Lambda表達式,使得調用更加精簡。

val numbers = 1..10 val doubles = numbers.map {it * 2} val sumOfSquares = doubles.fold(0) {x,y -> x+y}

除了這些,Kotlin還提供了很多類似字符串模板、標準函數庫、運算符重載的特性,這些特性使得代碼可以非常簡潔易讀,極大提升了開發者的體驗。

從實際項目來看,Kotlin的簡潔在代碼量上表現的非常明顯,一個提供了24個API的Spring  Boot微服務,通過Kotlin編寫的代碼量在8000行左右(含測試代碼)。同樣規模的微服務用Java編寫的情況下代碼量將遠大于這個數字。

安全 Safe

許多編程語言(包括  Java)中最常見的陷阱之一是訪問空的指針,導致空指針異常。Kotlin的安全性主要體現在它對Null-Safety的支持上。能夠使代碼在編譯期間就察覺到可能的NullPointerException,讓Java  developer能夠輕松擺脫NullPointerException。

var output: String output = null // Compilation error  val name: String? = null // Nullable type println(name.length()) // Compilation error

同時Kotlin還提供了一些自動轉型及類型推斷的特性,在提供安全檢查的同時也帶來了便捷。

下面也是一個來自官網的樣例,Kotlin在類型檢查得到true后,自動完成了Any到Invoice類型的轉換:

fun calculateTotal(obj: Any) {     if (obj is Invoice)         obj.calculateTotal() }

友好的開發工具 Tool-friendly

這個特點就不用多說了,引用官網那句傲嬌的原話就是 “It’s what we do best!”

和Java的互操作性 Interoperable

簡單來說這個特性就是Kotlin和Java是可以相互調用的。

這意味著我們可以利用任何已有的Java  libraries來構建我們的應用,讓我們無需放棄我們所熟悉的一切便可以享受Kotlin給我們帶來的愉快的編程體驗。

... import org.springframework.data.jpa.repository.JpaRepository import org.springframework.data.jpa.repository.JpaSpecificationExecutor ...  interface AreaRepository : JpaRepository<AreaEntity, Long>, JpaSpecificationExecutor<AreaEntity> {     fun existsByAreaId(id: UUID): Boolean     fun findOneByAreaId(areaId: UUID): AreaEntity? }

例子中是項目上一個用Kotlin編寫的基于Spring  JPA的Repository,可以看到得益于Interoperable的特性,在嘗試使用Kotlin時我們可以依賴的是一個完整的Java生態圈。我們依然可以使用我們所熟悉的框架、構建工具、開發工具和測試工具。

怎么使用Kotlin來擴展

如何開始?

看了這么吸引人的語言特性,或許你已經忍不住想要嘗試Kotlin了。但是實際情況可能是項目已經開始了一段時間,我們已經用Java為項目構建了很多功能。這個時候引入一個新的語言可能會給項目帶來一定的風險。那么我們可以如何開始呢?

使用Kotlin編寫單元測試

如果你比較保守,那么你可以開始嘗試在項目中僅通過Kotlin來編寫單元測試,同樣得益于Interoperable這個特性,我們可以輕松的使用Kotlin來為Java類編寫單元測試。這樣你可以不用擔心嘗試Kotlin為你的業務代碼帶來風險,同時也可以在編寫單元測試的過程中嘗試Kotlin語言的各種特性。

使用Kotlin來擴展

你還可以使用Kotlin來豐富項目中所用到的Library,使用Kotlin  Extensions來在不需要繼承的情況下完成對原有類型的擴展?;蛘咧苯油ㄟ^Kotlin來編寫工具類為項目服務。

//Extensions.kt fun String.lastChar() = this.get(this.length - 1) fun KPerson.fullName() = "${this.firstName} ${this.lastName}" //String template  //Java JUnit test Test public void lastChar() throws Exception {  assertEquals('n', Extensions.lastChar("Kotlin")); }  Test public void fullName() throws Exception {   KPerson k = new KPerson("Foo", "Bar", Gender.MALE, 18);   assertEquals("Foo Bar", Extensions.fullName(k)); }

使用Kotlin來重寫微服務

如果你在使用基于Spring  Boot的微服務,那么完全可以挑選一個優先級較低的服務逐步通過Kotlin進行改寫。你會發現這個轉變會發生的無比順滑。因為Kotlin不會改變你之前通過Spring  Boot構建微服務的方式。

這三個方法都可以讓你在風險可控的情況下嘗試Kotlin。讓你在感受Kotlin語言帶來的美好編程體驗的同時,使整個團隊逐漸熟悉Kotlin語言。你將會發現對于一個Java程序員來說,學習Kotlin真的是一件非常容易的事情,可以說一旦開始你就再也回不去了。

以上就是“怎么使用Kotlin來擴展”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女