【IT168 资讯】Simon称,虽然他是Kotlin编程语言的大力拥护者,但每天仍然有大量的Java编程工作。由于Kotlin的强大功能,所以在使用Java时需要多做出一些额外的努力,因为Java在功能上存在一些“缺陷”。
在这篇文章中,Simon会介绍一些他在使用Java编程时最怀念的Kotlin功能。
新建的和分号
自从使用Kotlin以来,在编写Java代码时总是会忘记两件事情:构造函数调用的新建关键字和用“;”来完成声明。Kotlin没有新建,甚至分号都是可选的,这减少了“语法噪音”。
数据类
在Kotlin中,数据类用于简单的数据容器,代表JSON对象或从其他用例返回函数中的复合对象。但Java不支持这种特殊类。因此,经常需要用户自己实现数据类。
一个特殊用例是函数返回的复合对象。例如,假设一个函数需要返回两个对象。在Kotlin中,可以直接使用一个数据类,或者更简单的来直接配对。在Java中,Simon倾向于创建一个值对象,这个对象具有几个最终字段的类,每个字段都通过构造函数来实例化。与Kotlin类似,不执行getter和setter,但直接将该类的字段用作公共属性。但这不是我们所学到的最佳实践方法,大多数Java代码样式检查者都会对此抱怨。在这里没有看到任何封装问题,这是Java中最简单的方法。下面显示了这样一个复合对象,内部类是Multi。
本地函数
在通常情况下,Simon倾向于创建仅在另一种单一方法中使用的私有方法,以使其更具有可读性。在Kotlin中,就可以使用本地函数,即函数内部的函数(函数内部),这样可以实现某些作用域。相对来说,这是一个更简洁的方法,因为函数只能在实际使用本地函数的函数中访问。来看一个例子:
这是一个来自vert.x应用程序的示例。X应用程序定义了一个本地函数,该函数在之后被调用了两次。这是一个简化代码的好方法。
单一表达式函数
在Kotlin中,可以创建单一表达式函数,即没有实体的函数。每当一个函数只包含一个表达式时,它可以在函数声明之后的一个=符号之后放置。
另一方面,在Java中,总是必须使用{}中包含的函数体,其范围至少在三行以上。这也可以称为是“语法噪音”。
默认参数
Java的一个非常讨厌的部分是方法必须重载,让我们来看一个例子:
我们可以看到一个类,它包含一个重载两次的方法测试(int,boolean)。这可能导致大量的冗余代码,但在Kotlin中,使用默认参数会更简单。
在对象实例上调用多个方法(with)
显然,Kotlin比Java更具功能性。Kotlin在很多情况下使用高阶函数,并提供了许多可以调用的标准库函数。With函数可用于创建实际增加代码可读性的范围,尤其是在单个对象上顺序调用多个函数时。
Null-Safety
据Simon说,自从他开始使用Kotlin以来,都可以使用可为空的类型,实际上忽略了来防止与null相关错误的类型系统工具。Kotlin在区分可空类型和不可空的类型上做的非常好。如果您严格使用这些工具,那么在运行时就不可能看到NullpointerException。
Lambda表达式和收集处理
Kotlin在Lambda表达式上放置了很多值。如前面的例子所示,lambdas有特殊的语法,这使其更加强大。这里要强调的是,使用语言处理函数,特别是lambdas的方式使Kotlin显着优于Java。来看一个Java Streams的简单例子,在Java 1.8中的lambdas引入的:
这是一个相当简单的Stream示例,用于从一个列表中获取名称列表。与1.8之前版本相比,这是非常大的一个改进。尽管如此,与Kotlin所追求的真正实用功能相比,Java只能望其项背:
另一个例子,其中员工的工资被计为总金额:
但在Kotlin中就很简单:
Kotlin的例子证明了它的可用性。Java不是一种函数式语言,在代码中就能看出,很难尝试采用诸如lambdas和stream这样的功能特性。如果你曾经体验过Kotlin的便捷,那就很难再回到Java。在熟悉IntelliJ之后,你还会使用Eclipse吗?
总结
在这篇短文中,Simon向您介绍了在使用Java编码时,怀念的Kotlin功能。Kotlin的强大功能,会让开发人员成为一个更好的程序员。Simon对两种语言的某些特性感到疑惑,并尝试找一些Kotlin专用的东西在Java使用。