国产欧美国产精品第二区-国产欧美日韩亚洲一区-国产中文字幕一区在线-欧美一级在线免费播放

登錄
免費(fèi)注冊(cè)
400-6565-277
首頁圖

新聞動(dòng)態(tài)

news information

Kotlin開發(fā)者眼中的Java缺少哪些特性?

2022-07-18作者:捷碼瀏覽:

Nicolas Fr?nkel 是一名資深程序員,擁有近二十年的Java開發(fā)經(jīng)歷。他在幾年前開始學(xué)習(xí)Kotlin,在此之后,每當(dāng)他再使用Java時(shí),總會(huì)思考為什么自己寫的Java代碼,看起來不如Kotlin那么優(yōu)雅,并且發(fā)現(xiàn)Java缺少一些可以提升代碼可讀性、表現(xiàn)力和可維護(hù)性的功能。對(duì)此,Nicolas Fr?nkel以“Kotlin開發(fā)者”身份總結(jié)了他認(rèn)為Java缺少的特性:

· 不可變引用 (Immutable References)

· 空安全 (Null Safety)

· 擴(kuò)展函數(shù) (Extension Function)

· 具體化的泛型 (Reified Generics)

1.不可變引用 (Immutable References)

雖然Java允許開發(fā)者定義不可變引用,但這不是強(qiáng)制性的。因?yàn)槟J(rèn)情況下,引用是可變的,但大多數(shù)Java代碼并沒有利用不可變引用。

Kotlin不會(huì)讓開發(fā)者選擇:每個(gè)屬性和局部變量都需要定義為a val或a var。另外,Kotlin不支持重新分配方法參數(shù)。

2.空安全(Null Safety)

在Java中,無法知道變量是否為null?;诖?,Java 8引入了Optional類型。從Java 8開始,返回Optional意味著基礎(chǔ)值可以是null;返回另一種類型則意味著不是。

Optional

optional.png 

顯然,有些庫專注于特定的IDE。此外,庫之間幾乎不兼容。而且可供使用的庫太多了,以至于經(jīng)常有人會(huì)詢問該使用哪一個(gè)。

最后,在Java中使用可空性庫是可選的。而Kotlin則要求每種類型都可以為空或不可為空。

val nonNullable: String = computeNonNullableString()val nullable: String? = computeNullableString()

3.擴(kuò)展函數(shù) (Extension Function)

對(duì)于以下這段 Java 代碼:

class StringUtils {                                          

private StringUtils() {}                                 

    static String capitalize(String string) {               

        return string.substring(0, 1).toUpperCase()

            + string.substring(1);                           

    }

}String string = randomString();                              

String capitalizedString = StringUtils.capitalize(string);

可使用Kotlin的擴(kuò)展函數(shù)特性重寫為:

fun String.capitalize2(): String {                            

return substring(0, 1).uppercase() + substring(1);

}val string = randomString()val capitalizedString = string.capitalize2()

Kotlin提供了使用新功能擴(kuò)展類或接口的能力,而無需從類繼承或使用Decorator等設(shè)計(jì)模式。開發(fā)者可以通過名為 extensions 的特殊聲明來實(shí)現(xiàn)它。

例如,開發(fā)者可以為無法修改的第三方庫中的類或接口編寫新函數(shù)。這些函數(shù)可以以常見的方式進(jìn)行調(diào)用,就好像它們是原始類的方法一樣。這種機(jī)制稱為擴(kuò)展函數(shù)。

4.具體化的泛型 (Reified Generics)

舉個(gè)例子,如何從值的容器中獲取類型化的值。下面是Spring的示例:

org/springframework/beans/factory/BeanFactory.java

public interface BeanFactory {

<T> T getBean(Class<T> requiredType);

}

開發(fā)者添加了一個(gè)Class<T>參數(shù),以便能夠知道方法體中的類型。但如果Java已經(jīng)具體化了泛型,那就可以這樣寫:

public interface BeanFactory {

    <T> T getBean();

}

如果 Kotlin 已經(jīng)具體化了泛型:

interface BeanFactory {    fun <T> getBean(): T

}

并調(diào)用函數(shù):

val factory = getBeanFactory()val anyBean = getBean<Any>()

 

Nicolas Fr?nkel表示,Kotlin已成為他在JVM上的首選編程語言,至于Java,只有在必要的時(shí)候才會(huì)使用。更多時(shí)候,他們更傾向于使用基于Java的更高效的專業(yè)化低代碼平臺(tái),以避免大量繁瑣的底層代碼帶來的工作量。

掃碼添加捷碼微信入群~已有6000+智慧城市/AloT/IT行業(yè)精英入群交流,入群即得《Java核心技術(shù)電子書》

 20220324公眾號(hào)底部二維碼-小裂變4.png



%用戶還看了以下內(nèi)容

無代碼開發(fā)平臺(tái)是什么?助力"人人都是開發(fā)者"的神奇工具! 閱讀556次

2022年 閱讀944次

向開發(fā)者開放免費(fèi)注冊(cè)!“遠(yuǎn)眺捷碼”提供一站式軟件快速開發(fā)平臺(tái) 閱讀1341次

公民開發(fā)者應(yīng)用是應(yīng)用開發(fā)的未來(低代碼與無代碼) 閱讀884次

快速試用捷碼

x