IE盒子

搜索
查看: 177|回复: 0

Kotlin开发者眼中的Java缺少哪些特性?

[复制链接]

3

主题

5

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2023-1-19 09:40:29 | 显示全部楼层 |阅读模式
Nicolas Fränkel 是一名资深程序员,拥有近二十年的Java开发经历。他在几年前开始学习Kotlin,在此之后,每当他再使用Java时,总会思考为什么自己写的Java代码,看起来不如Kotlin那么优雅,并且发现Java缺少一些可以提升代码可读性、表现力和可维护性的功能。对此,Nicolas Fränkel以“Kotlin开发者”身份总结了他认为Java缺少的特性:
·不可变引用 (Immutable References)
·空安全 (Null Safety)
·扩展函数 (Extension Function)
·具体化的泛型 (Reified Generics)
1.不可变引用 (Immutable References)
虽然Java允许开发者定义不可变引用,但这不是强制性的。因为默认情况下,引用是可变的,但大多数Java代码并没有利用不可变引用。
Kotlin不会让开发者选择:每个属性和局部变量都需要定义为a val或a var。另外,Kotlin不支持重新分配方法参数。
2.空安全(Null Safety)
在Java中,无法知道变量是否为null。基于此,Java 8引入了Optional类型。从Java 8开始,返回Optional意味着基础值可以是null;返回另一种类型则意味着不是。
Optional


显然,有些库专注于特定的IDE。此外,库之间几乎不兼容。而且可供使用的库太多了,以至于经常有人会询问该使用哪一个。
最后,在Java中使用可空性库是可选的。而Kotlin则要求每种类型都可以为空或不可为空。
val nonNullable: String = computeNonNullableString()val nullable: String? = computeNullableString()
3.扩展函数 (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的扩展函数特性重写为:
fun String.capitalize2(): String {                           
return substring(0, 1).uppercase() + substring(1);
}val string = randomString()val capitalizedString = string.capitalize2()
Kotlin提供了使用新功能扩展类或接口的能力,而无需从类继承或使用Decorator等设计模式。开发者可以通过名为 extensions 的特殊声明来实现它。
例如,开发者可以为无法修改的第三方库中的类或接口编写新函数。这些函数可以以常见的方式进行调用,就好像它们是原始类的方法一样。这种机制称为扩展函数。
4.具体化的泛型 (Reified Generics)
举个例子,如何从值的容器中获取类型化的值。下面是Spring的示例:
org/springframework/beans/factory/BeanFactory.java
public interface BeanFactory {
<T> T getBean(Class<T> requiredType);
}
开发者添加了一个Class<T>参数,以便能够知道方法体中的类型。但如果Java已经具体化了泛型,那就可以这样写:
public interface BeanFactory {
    <T> T getBean();
}
如果 Kotlin 已经具体化了泛型:
interface BeanFactory {    fun <T> getBean(): T
}
并调用函数:
val factory = getBeanFactory()val anyBean = getBean<Any>()
Nicolas Fränkel表示,Kotlin已成为他在JVM上的首选编程语言,至于Java,只有在必要的时候才会使用。更多时候,他们更倾向于使用基于Java的更高效的专业化低代码平台,以避免大量繁琐的底层代码带来的工作量。
相关链接:https://blog.frankel.ch/miss-in-java-kotlin-developer/
关于捷码:
“捷码”低代码平台基于Java语言进化而来,其开发能力基于Java而超越Java,在线化的开发环境更能支持多人协同的开发模式和跨平台开发模式,是国内目前最新锐、最优秀的全技术栈低码PAAS开发工具之一,为国内广大的IT同行提供了一条专业的、低码化、迅捷开发的路径,可以帮助开发者们和软件公司获得卓越的软件开发、交付能力。添加捷码微信ytgemcoder,即可进入实操体验一下哦!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表