对此,Nicolas Fränkel 以 “Kotlin 开发者” 身份总结了他认为 Java 缺少的特性:
成都创新互联公司从2013年成立,先为洛隆等服务建站,洛隆等地企业,进行企业商务咨询服务。为洛隆企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
虽然 Java 允许开发者定义不可变引用,但这不是强制性的。因为默认情况下,引用是可变的。大多数 Java 代码没有利用不可变引用。
Kotlin 不会让开发者选择:每个属性和局部变量都需要定义为 aval 或 a var。另外,Kotlin 不支持重新分配方法参数。
在 Java 中,无法知道变量是否为 null。基于此,Java 8 引入了 Optional类型。从 Java 8 开始,返回 Optional 意味着基础值可以是 null; 返回另一种类型则意味着不是。但是,Optional 开发者仅将其设计为返回值。方法参数和返回值的语言语法中没有可用的内容。为了解决这个问题,许多库提供了编译时注释。
显然,有些库专注于特定的 IDE。此外,库之间几乎不兼容。而且可供使用的库太多了,以至于经常有人会询问该使用哪一个。
最后,在 Java 中使用可空性库是可选的。而 Kotlin 则要求每种类型都可以为空或不可为空。
val nonNullable: String = computeNonNullableString()
val nullable: String? = computeNullableString()
对于以下这段 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 的扩展函数特性重写为:
fun String.capitalize2(): String {
return substring(0, 1).uppercase() + substring(1);
}
val string = randomString()
val capitalizedString = string.capitalize2()
Kotlin 提供了使用新功能扩展类或接口的能力,而无需从类继承或使用 Decorator 等设计模式。开发者可以通过名为 extensions 的特殊声明来实现它。
例如,开发者可以为无法修改的第三方库中的类或接口编写新函数。这些函数可以以常见的方式进行调用,就好像它们是原始类的方法一样。这种机制称为扩展函数。
举个例子,如何从值的容器中获取类型化的值。下面是 Spring 的示例:
org/springframework/beans/factory/BeanFactory.java
public interface BeanFactory {
T getBean(Class requiredType);
}
开发者添加了一个 Class
public interface BeanFactory {
T getBean();
}
如果 Kotlin 已经具体化了泛型:
interface BeanFactory {
fungetBean(): T
}
并调用函数:
val factory = getBeanFactory()
val anyBean = getBean()
Nicolas Fränkel 表示,Kotlin 已成为他在 JVM 上的首选编程语言,至于 Java,只有在必要的时候才会使用。
分享标题:Kotlin开发者眼中的Java缺少哪些特性?
URL地址:http://www.shufengxianlan.com/qtweb/news44/96244.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联