Kotlin 知识点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin 知识点相关的知识,希望对你有一定的参考价值。
lateinit 延迟加载,lateinit 只能修饰, 非kotlin基本类型因为Kotlin会使用null来对每一个用lateinit修饰的属性做初始化,而基础类型是没有null类型,所以无法使用lateinit。
1.lazy{} 只能用在val类型, lateinit 只能用在var类型 如 :
2.lateinit不能用在可空的属性上和java的基本类型上 如:
3.lateinit可以在任何位置初始化并且可以初始化多次。而lazy在第一次被调用时就被初始化,想要被改变只能重新定义
4.lateinit 有支持(反向)域(Backing Fields)
--------------
awaitEvent<Long> { handler -> vertx.setTimer(1000, handler) } //可以简化成 awaitEvent<Long>{vertx.setTimer(1000, it)}
launch(vertx.dispatcher()) {//dispatcher可以让代码在vertx的EventLoop里运行 awaitEvent<Long> { handler -> vertx.setTimer(1000, handler) } println("Event fired from timer") }
通过改变launch的参数,使coroutines可以跑在vertx的EventLoop下,通过awaitResult包装vert.x的API使之可以通过协程同步返回。完成这两个功能vert.x就可以完美的和协程融合了。下面我们看一个稍微复杂的例子
val consumer = vertx.eventBus().localConsumer<String>("a.b.c") consumer.handler { message -> println("Consumer received:${message.body()}") message.reply("pong") } // Send a message and wait for a reply val reply = awaitResult<Message<String>> { h -> vertx.eventBus().send("a.b.c", "ping", h) } println("Reply received:${reply.body()}")
我们用了 awaitResult
这个API包装了 send
的最后一个参数,这样send方法里的Handler参数可以同步的返回给 reply
,也就是说通过协程变成了同步。然后我们就可以直接打印出reply里的一些数据,整体逻辑也是线性的。
细心的朋友会发现,这里是通过awaitResult而不是awaitEvent。这两者的区别很简单, awaitResutl
会有一个确定的返回值, awaitEvent
一般没有确定的返回值,有也是 void
类型。这两个方法包装了vert.x的两个核心API, Handler<Void>
与 Handler<AsyncResult<T>>
coroutines,还提供了包装Rx以及FutureAPI的功能,vert.x里默认有自己的Future实现,我们也提供了相应的转换,而且非常简单。
val httpServerFuture = Future.future<HttpServer>() vertx.createHttpServer() .requestHandler { req -> req.response().end("Hello!") } .listen(8000, httpServerFuture) val httpServer = httpServerFuture.await() println("HTTP server port:${httpServer.actualPort()}") val result = CompositeFuture.all(httpServerFuture, httpServerFuture).await() if (result.succeeded()) { println("The server is now running!") } else { result.cause().printStackTrace() }
这里通过扩展 Future
的方法 Future.await
直接将结果以同步的方式返回出来,瞬间变得简单多了。同理一样可以用于 CompositeFuture
的结果处理。
参考文档:
http://www.itboth.com/d/qyUbEf/java-kotlin
以上是关于Kotlin 知识点的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin学习之旅解决错误:kotlin.NotImplementedError: An operation is not implemented: Not yet implemented(代码片段