
Kotlin 和 Java 都是 JVM 说话,所以它们之间互相转换很轻易,是如许吗?不美满是,让 Kotlin 的类对 JEE 友爱还须要一点工作。
简单的开端:RestApplication 类
Kotlin 的重要优势之一就是能很好地集成 Java。事实上 Java 很轻易转换为 Kotlin,看起来竽暌姑 Kotlin 写 Java EE 应用似乎不须要动什么脑筋。然而,两者之存放在一些奥妙的差别,使点缀换并不那么顺畅:
- 大年夜多半框架请求非 final 的类,而 Kotlin 的类是 final 的。
- 注入会惹人大年夜量不须要的空检查。
- 上述两点以及强迫的无参数构造函数会妨碍编写函数式风格的代码。
Java EE 和 Kotlin 并不是真正的同伙,除非你撮合它们。幸好所有这些问题都可以避免。
我们的转换目标是一个简单的 Java WAR,它可以经由过程 REST 接口大年夜数据库中存储和检索记录。大年夜 GitHub 拉取 fables-kotlin 仓库开端吧。这个项目在 jee/java 目次下。如不雅想运行它并进行测试,请查看 GitHub 上的解释。
让 Kotlin 类对 Java EE 友爱

转换后的代码正常工作,但它仍然是 Java 风格的代码,只是用了不合的说话。经由过程弗成变的 Kotlin set 并把 getClasses 变成一个真正的函数来代替复杂的 Java HashSet 初始化过程 —— 如许做:
Java EE 办事器对类的构造方法异常抉剔。它们大年夜多半必须长短 final,并且拥有一个无参数的构造函数,以及公有办法。无参数构造函数用于实例化,而别的两个需求用于生成代劳。代劳会拦截对象的调用处丰富它们的附加功能。如不雅写的是 Java 代码,不须要推敲太多,但写 Kotlin 代码会有点不一样。
在 Build 脚本中参加 Kotlin
在开端转换之前,将 Kotlin 编译器添加到 build 脚本中。也就是大年夜这个:

改为这个:

我们必须注册 Kotlin 编译器插件,将其应用到模块,并添加一些依附项。Kotlin 标准库并不是强迫请求应用的,它固然小型,却供给了大年夜量有效的功能。
IntelliJ 内置支撑将 Java 类转换为 Kotlin。这很轻易应用:你可以打开一个 Java 类然后按下 [CTRL]+[ALT]+[SHIFT]+K,或者拷贝一段 Java 文件中的代码并在 Kotlin 文件中粘贴」?现方法都邑主动转换代码。下面把这个组合键称为 [Kotlin]。

转换接口
按下 [Kotlin] 然后持续。
转换简单的弗成变类
下一步,我们将转换 fables.kotlin.jee.java.rest.KittenRest.java 类。留意这个类只有一个构造函数,个中包含所有属性的赋值,没有 setters。这个类用于在 REST 中传输数据,所以它被写成弗成变的。如不雅这个类拥有一个无参数构造函数并含有 setters,框架就能对它进行实例化并用 setters 填充数据。这种情况下,框架必须应用无参数构造函数。因为 Java 构造函数不供给参数名称,是以主动绑定是弗成能实现的。这就是为什么须要 @JsonProperty 注解。参数名元数据在 Java 8 中可以经由过程一个特别的编译参数供给,但默认情况下没有这个特点。
按下 [Kotlin],IDEA 会帮你把类转换成 Kotlin 代码。很神奇,类的内容不见了。


歇息一下,做灯揭捉?习:
创建一个类型为 Person 且具有 person 属性的 JavaBean。为其添加 getter, setter, equals, hasCode, 和 toString 办法,以及接收 person 的构造函数。如今统计一下你写“person”的次数,不区分大年夜小写。
欲望你对结不雅不要太震动。拥有与这个 Java 类同样功能的 Kotlin 类在代码格局化优胜的情况下只须要编写 4 行代码。
JPA 实体类
热身过后,我们来测验测验更有趣的工作:JPA 实体类。这是很典范的,拥有很长的 setters 和 getters、巨大年夜的equals, hashCode, 和toString的类。下面会用一个简短的┞藩要来提示你它有多痴肥。
这里我们有第一个进行真正改进的机会。再应用一次 [Kotlin]。如今声明它是一个数据类(data class)。将主构造函数声明为私有的,放入所有字段的声明,删除默认的器械并添加 override。删除所有的办法(但要保存构造函数)。让次构造函数调用主构造函数。来看看“瘦身”的效不雅:
不过我们仍然逗留在无参数构造函数的阶段。来看看强迫的 name 属性。该值精晓过公共构造函数或 JPA 供给。然而,JPA 会先构造对象,然后再设置值,这意味着我们必须为构造供给一些默认值。空字符串是个简单但成本小的筹划。
营业办事
推荐阅读
【51CTO.com原创稿件】2017年6月8日,国度工业信息平顺家当成长联盟成立大年夜会在北京万寿宾馆成功举办。国度工业信息平顺家当成长联盟成立苗圩在讲话中指出,跟着新一代信息技巧与制造技>>>详细阅读 本文标题:Kotlin和Java EE系列之—— 如何让Kotlin类对Java EE友好 地址:http://www.17bianji.com/lsqh/35661.html 1/2 1

网友点评
精彩导读
科技快报
品牌展示