如何将Java双冒号运算符(::)转换为Scala?

pme*_*pme 6 java lambda scala scala-java-interop camunda

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

我在这里有以下代码receiveTask::receive

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

根据中的答案,是否可以在Scala中使用Java 8样式方法引用?我可以很容易地将其翻译为:

receiveTask.defer("P1D", receiveTask.receive _)
Run Code Online (Sandbox Code Playgroud)

但这给了我:

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

这是receive功能:

void receive();
Run Code Online (Sandbox Code Playgroud)

这是预期的接口:

public interface Deferred {
  void execute() throws Exception;
}
Run Code Online (Sandbox Code Playgroud)

如何在Scala中实现这一目标?这不是Scala中可以使用Java 8样式方法引用的副本吗?,则无法解决“错误:(84,45)类型不匹配; ...”

pme*_*pme 5

After reading this stackoverflow answer, I could solve it to:

receiveTask.defer("P1D", new Deferred{
         def execute(): Unit = receiveTask.receive()
       })
Run Code Online (Sandbox Code Playgroud)

Intellij proposed then to convert it to a Single Abstract Method:

receiveTask.defer("P1D", () => receiveTask.receive())
Run Code Online (Sandbox Code Playgroud)

The problem was that receive had also an overloaded function that takes a parameter.