Android 開發多年了,在BA工作也有多年,但爲什麼在Android開發中我仍然不想使用Kotlin?
如果你有下面羅列問題的解決方案,就請你把它們看做爲我個人意見和評論吧!
1)編譯速度緩慢
一個比較小的工程(共有100類左右,大部分採用Kotlin)花費1分鐘進行編譯,這是無法讓人接受的。
https://youtrack.jetbrains.com/issue/KT-6246
2)Kotlin插件在IDEA編譯器中的表現
在編碼過程中,語法分析和Kotlin在IDEA(Android Sutdio)中的高亮顯示讓開發機器經常卡頓,令人無法接受。
3)annotation(註解)處理有問題 有時它給出的錯誤提示太粗略,但你又不得不解決。
幾乎每天我都能在不同的Android開發社區上看到對此的抱怨。(這裏resources應該是指不同的(信息)來源)
4) 通過Mockito模擬通過Kotlin創建的類是痛苦的
在Kotlin中默認情況下,幾乎所有的成員都是final類型,例如:classes, methods, 等等。而我確實喜歡因爲它強制保持了不變性 ->減少bug。但是與此同時,它使)通過Mockito模擬通過Kotlin創建的類是痛苦的(一種JVM世界的黃金標準)同時它與語言設計相反。
是的,PowerMock是一個解決方案,但是它通過Robolectric這類工具進行交互,同時一般來說,它是一個不錯的規則針對你模擬final classes和final method。
我知道在Java開發中我們面對non-final的設計都會遇到那個問題,但是與此同時我不想僅僅爲了測試去改變代碼。
5) No static analyzers for Kotlin yet
是的,Cotlinc比javac讓代碼更安全,如果你想在編譯器上實現更好的體驗,你又不想把它變成static analyzer(靜態分析器)。
靜態代碼非常適合CI,但是你可能不希望本地開發中每次點擊run按鈕都運行它。
Java有:FindBugs, PMD, Checkstyle, Sonarqube, Error Prone, FB infer。
Kotlin有:kotlinc。
我認爲以上觀點都是客觀的。下面的觀點更傾向於主觀的和個人看法。
6)實現了Java的equals()方法提供的對象比較功能,而不是比較對象的引用是否相同
如果Kotlin是更好的Java或"Java on steroids",它應該變得更好,而不是去打破。
想象一下你重寫Java工程到Kotlin的過程,你會同時遇到Java和Kotlin代碼。
因開發語言不同你可能會閱讀和編寫相同的代碼但是代碼的功能效果不同。這也是我不喜歡Groovy的一個原因。
7)不正確的操作符重載可能會導致錯誤
觀點1:未來你需要處理使用Kotlin開發的久代碼庫。
觀點2:你可以添加操作符來重載已存在的java類來擴展功能。
想象一下,你需要處理類似val person3 = person1 + person2這類已經寫好的代碼。
每個你即將工作的項目,在一個相同的類中的操作符都有它獨特的含義。
更多職場經驗請參考我的博文:Android開發:爲什麼你的學習效率如此低,爲什麼你很迷茫?