java - 如何将 Java 双冒号运算符 (::) 翻译成 Scala?

标签 java scala lambda camunda scala-java-interop

我想使用 camunda-bpm-assert-scenario在我的 ScalaTests 中。

我有这段代码 receiveTask::receive:

when(documentRequest.waitsAtReceiveTask("ReceiveTaskWaitForDocuments")).thenReturn((receiveTask) -> {
  receiveTask.defer("P1DT1M", receiveTask::receive);
});

根据Is it possible to use a Java 8 style method references in Scala?中的回答我可以很容易地将其翻译成:

receiveTask.defer("P1D", receiveTask.receive _)

但这给了我:

Error:(84, 45) type mismatch;
 found   : Unit
 required: org.camunda.bpm.scenario.defer.Deferred
       receiveTask.defer("P1D", receiveTask.receive _)

这是接收函数:

void receive();

这是预期的界面:

public interface Deferred {
  void execute() throws Exception;
}

我如何在 Scala 中实现这一点? 这不是 Is it possible to use a Java 8 style method references in Scala? 的副本,没有解决“Error:(84, 45) type mismatch; ……”

最佳答案

看完这篇stackoverflow answer ,我可以解决它:

receiveTask.defer("P1D", new Deferred{
         def execute(): Unit = receiveTask.receive()
       })

Intellij 建议将其转换为单一抽象方法:

receiveTask.defer("P1D", () => receiveTask.receive())

问题是 receive 还有一个带参数的重载函数。

关于java - 如何将 Java 双冒号运算符 (::) 翻译成 Scala?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57766482/

相关文章:

mongodb - 以编程方式启用分片+使用带有 Mongo 2.4 的 casbah 在集合上选择分片键

scala - 如何在Scala中将此map/flatMap转换为for comprehension?

spring - 为什么这个 Spring 映射没有注入(inject)到我的 Scala 对象中?

java - 如何在 Vector Java 的 Vector 中查找(打印)指定字段

java - 服务器集群的缓存方法

java - SAX 解析器 - OutOfMemoryError : Java heap space

C# 在 lambda 表达式中声明变量

java - 如何从文本文件检查用户名和密码的有效性

c# - 如何展平 C# Lambda 表达式中嵌套拆分的结果

java - 如何读取直接触发lambda执行的上传文件?