Vert.x for Kotlin
如您使用 Maven 或者 Gradle,可以通过添加以下依赖来使用 Vert.x 核心 API 以启用 Kotlin支持:
-
Maven (在
pom.xml
文件中):
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-core</artifactId>
<version>4.4.0</version>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-lang-kotlin</artifactId>
<version>4.4.0</version>
</dependency>
-
Gradle (在
build.gradle
文件中):
compile "io.vertx:vertx-core:4.4.0"
compile "io.vertx:vertx-lang-kotlin:4.4.0"
Verticles
编写 Verticles
使用 Kotlin 编写一个 Verticle 的方式与 Java 相同,即继承 AbstractVerticle
类即可。
示例如下:
import io.vertx.core.AbstractVerticle
class MyVerticle : AbstractVerticle() {
// 当 verticle 被部署时会被调用
override fun start() {
}
// 可选的 - 当 verticle 被接触部署时会被调用
override fun stop() {
}
}
请参阅 Java 文档
Data 对象构造器
Data 对象在 Vert.x 技术栈起着重要作用(Data 对象可以与 JSON 互相转换)
举个例子,Vert.x 模块常常使用 Data 对象作为服务配置:
val classic: HttpServerOptions = HttpServerOptions()
.setIdleTimeout(5)
.setIdleTimeoutUnit(TimeUnit.MINUTES)
.setLogActivity(true)
有一种更优雅的构造 Data 对象的方式(即使上述方法也是可以的)
在 Kotlin 中,所有 Data 对象都有一个后缀为 Of
的构造器 (builder):
val options = httpServerOptionsOf(idleTimeout = 5, idleTimeoutUnit = TimeUnit.MINUTES, logActivity = true)
JSON
不同于其他语言, Java 没有为 JSON 提供一等公民的支持,所以我们提供了两个类,使 Vert.x 应用中使用 JSON 更加容易
JsonObject
类用来表示 JSON 对象, JsonArray
类用来表示数组,可以参考 Java 文档获得更多信息。
构造器
构造器可用于更顺畅地构造 JSON :
// 该 json 构造器声明了一个 JSON 结构
val result = json {
// 在该块中可以使用 `obj` 函数
// 使用变长 Pair 参数
obj(
"key_1" to 1,
"key_2" to 2,
"key_3" to 3
)
}
// 或者使用可迭代的 Pair 集合
val result1 = json {
obj((1..3).map { "key_$it" to it })
}
// 还可以是 Map<String, Any?>
val result2 = json {
obj(someMap)
}
// 甚至在对象接收者附加函数
val result3 = json {
obj {
for (i in 1..3) {
put("key_$i", i)
}
}
}
构造 JSON 数组也是同样的
// 这个 json 构造器用于声明 JSON 结构
val result = json {
array("1", "2", "3")
}
// 一个可迭代的值集合
val result1 = json {
array((1..3).map { "$it" })
}
// 在对象接收者上附加函数
val result2 = json {
array {
for (i in 1..3) {
add("$i")
}
}
}
当然混合对象和数组也是可行的
// 这个 json 构造器用于声明 JSON 结构
val result = json {
obj(
"firstName" to "Dale",
"lastName" to "Cooper",
"age" to 64,
"names" to array("Dale", "Bartholomew")
)
}