什么是Java相当于Kotlin的函数types?

我有Kotlin代码和Java测试代码。 由于KotlinMockito不是最好的朋友,所以我没有将测试代码迁移到Kotlin

Kotlin我有块types的方法。 例如:

 open fun getProductInfo(resultListener: (List)->Unit, errorListener: (Throwable)->Unit) { ... } 

现在我想在Java测试中存储这个方法。 什么是types的Java相当于什么? 换句话说,我应该写下面的代码:

 doAnswer(invocation -> { ??? resultListener = (???) invocation.getArguments()[0]; // call back resultListener return null; }).when(api).getProductInfo(any(), any()); 

Kotlin in Action书中:

Kotlin标准库定义了一系列接口,对应于不同数量的函数参数: Function0 (该函数不带参数), Function1 (该函数带一个参数)等等。 每个接口定义一个invoke方法,调用它将执行该函数。

在这种情况下,这两个函数都是Function1实例,因为它们是带有一个参数的函数:

 Mockito.doAnswer(invocation -> { Function1, Unit> resultListener = (Function1, Unit>) invocation.getArguments()[0]; Function1 errorListener = (Function1) invocation.getArguments()[1]; resultListener.invoke(new ArrayList<>()); return null; }).when(api).getProductInfo(any(), any()); 

另外,你可以尝试mockito-kotlin和Mockito的内联版本 ,以便在Kotlin中编写测试。

为什么不尝试在Android Studio或IntelliJ中获取Kotlin的Java代码:

  • 菜单 – >工具 – > Kotlin – >显示Kotlin字节码
  • 点击 – >反编译按钮
  • 复制Java代码

这样你就可以继续使用Mockito,不幸的是你会得到冗余的代码行(不是很多),因为Kotlin处理字节码。