Kotlin Vertx类型不匹配发现Future <unit> expected Handler <asyncresult <void>&gt;

时间:2017-06-27 06:36:16

标签: kotlin vert.x kotlin-interop

我认为在Kotlin,Unit相当于Void。使用Vert.x服务发现时,无法将Future<Unit>传递给unpublish(String id, Handler<AsyncResult<Void>> resultHandler)(提供类型不匹配),但它会毫无问题地接受Future<Void>。为什么会这样,是否有解决方案,或者我只能使用Void

1 个答案:

答案 0 :(得分:3)

Unit不等同于Void,相当于kotlin中的void

在java中,void是关键字,但Void是一个类。所以下面的代码无法编译:

fun foo():Void{/**need return a Void instance exactly**/}

fun bar():Void{ return Unit; }
//                     ^--- type mismatch error

java应用相同的规则,例如:

Void canNotBeCompiled(){
  // must return a Void instance exactly.
}

Void foo(){
  return Void.TYPE;
}

Void nil(){
  return null;
}

最后,Unit文档也说:

  

只有一个值的类型:Unit对象。此类型对应于Java中的 void 类型。