新聞中心
對此,Nicolas Fr?nkel 以 “Kotlin 開發(fā)者” 身份總結了他認為 Java 缺少的特性:

成都創(chuàng)新互聯(lián)公司從2013年成立,先為洛隆等服務建站,洛隆等地企業(yè),進行企業(yè)商務咨詢服務。為洛隆企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。
- 不可變引用 (Immutable References)
- 空安全 (Null Safety)
- 擴展函數(shù) (Extension Function)
- 具體化的泛型 (Reified Generics)
不可變引用 (Immutable References)
雖然 Java 允許開發(fā)者定義不可變引用,但這不是強制性的。因為默認情況下,引用是可變的。大多數(shù) Java 代碼沒有利用不可變引用。
Kotlin 不會讓開發(fā)者選擇:每個屬性和局部變量都需要定義為 aval? 或 a var。另外,Kotlin 不支持重新分配方法參數(shù)。
空安全 (Null Safety)
在 Java 中,無法知道變量是否為 null??;诖耍琂ava 8 引入了 Optional?類型。從 Java 8 開始,返回 Optional? 意味著基礎值可以是 null?; 返回另一種類型則意味著不是。但是,Optional 開發(fā)者僅將其設計為返回值。方法參數(shù)和返回值的語言語法中沒有可用的內容。為了解決這個問題,許多庫提供了編譯時注釋。
顯然,有些庫專注于特定的 IDE。此外,庫之間幾乎不兼容。而且可供使用的庫太多了,以至于經(jīng)常有人會詢問該使用哪一個。
最后,在 Java 中使用可空性庫是可選的。而 Kotlin 則要求每種類型都可以為空或不可為空。
val nonNullable: String = computeNonNullableString()
val nullable: String? = computeNullableString()
擴展函數(shù) (Extension Function)
對于以下這段 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 的擴展函數(shù)特性重寫為:
fun String.capitalize2(): String {
return substring(0, 1).uppercase() + substring(1);
}
val string = randomString()
val capitalizedString = string.capitalize2() Kotlin 提供了使用新功能擴展類或接口的能力,而無需從類繼承或使用 Decorator 等設計模式。開發(fā)者可以通過名為 extensions 的特殊聲明來實現(xiàn)它。
例如,開發(fā)者可以為無法修改的第三方庫中的類或接口編寫新函數(shù)。這些函數(shù)可以以常見的方式進行調用,就好像它們是原始類的方法一樣。這種機制稱為擴展函數(shù)。
具體化的泛型 (Reified Generics)
舉個例子,如何從值的容器中獲取類型化的值。下面是 Spring 的示例:
org/springframework/beans/factory/BeanFactory.java
public interface BeanFactory {
T getBean(Class requiredType);
} 開發(fā)者添加了一個 Class
public interface BeanFactory {
T getBean();
} 如果 Kotlin 已經(jīng)具體化了泛型:
interface BeanFactory {
fun getBean(): T
} 并調用函數(shù):
val factory = getBeanFactory()
val anyBean = getBean()
Nicolas Fr?nkel 表示,Kotlin 已成為他在 JVM 上的首選編程語言,至于 Java,只有在必要的時候才會使用。
網(wǎng)頁標題:Kotlin開發(fā)者眼中的Java缺少哪些特性?
本文URL:http://fisionsoft.com.cn/article/cocphso.html


咨詢
建站咨詢
