日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Kotlin開(kāi)發(fā)者眼中的Java缺少哪些特性?

對(duì)此,Nicolas Fr?nkel 以 “Kotlin 開(kāi)發(fā)者” 身份總結(jié)了他認(rèn)為 Java 缺少的特性:

成都創(chuàng)新互聯(lián)公司從2013年成立,先為洛隆等服務(wù)建站,洛隆等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢(xún)服務(wù)。為洛隆企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

  • 不可變引用 (Immutable References)
  • 空安全 (Null Safety)
  • 擴(kuò)展函數(shù) (Extension Function)
  • 具體化的泛型 (Reified Generics)

不可變引用 (Immutable References)

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

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

空安全 (Null Safety)

在 Java 中,無(wú)法知道變量是否為 null?。基于此,Java 8 引入了 Optional?類(lèi)型。從 Java 8 開(kāi)始,返回 Optional? 意味著基礎(chǔ)值可以是 null?; 返回另一種類(lèi)型則意味著不是。但是,Optional 開(kāi)發(fā)者僅將其設(shè)計(jì)為返回值。方法參數(shù)和返回值的語(yǔ)言語(yǔ)法中沒(méi)有可用的內(nèi)容。為了解決這個(gè)問(wèn)題,許多庫(kù)提供了編譯時(shí)注釋。

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

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

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

擴(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ù)特性重寫(xiě)為:

fun String.capitalize2(): String {                            
return substring(0, 1).uppercase() + substring(1);
}

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

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

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

具體化的泛型 (Reified Generics)

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

org/springframework/beans/factory/BeanFactory.java

public interface BeanFactory {
T getBean(Class requiredType);
}

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

public interface BeanFactory {
T getBean();
}

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

interface BeanFactory {
fun getBean(): T
}

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

val factory = getBeanFactory()
val anyBean = getBean()

Nicolas Fr?nkel 表示,Kotlin 已成為他在 JVM 上的首選編程語(yǔ)言,至于 Java,只有在必要的時(shí)候才會(huì)使用。


網(wǎng)站名稱(chēng):Kotlin開(kāi)發(fā)者眼中的Java缺少哪些特性?
當(dāng)前URL:http://m.5511xx.com/article/cocphso.html