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)类型不匹配; ...”
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.
归档时间: |
|
查看次数: |
96 次 |
最近记录: |