我有以下测试方法:
public scala.concurrent.Future<String> send() {
return "OK"; //error - should wrap with future
}
如何让它返回 scala future(这是 java 代码,所以没有找到任何示例(?
如果您使用的是 Scala 2.12.x 库,这很容易。
在斯卡拉中,你会写Future(doSomeStuff())
.或者简单地Future.successful("OK")
,如果您真的只想将文字包装在Future
中.在 Java 中,这转化为以下之一:
import scala.concurrent.*;
public Future<String> send1() {
return Future.apply( () -> doSomeStuff(), ExecutionContext.global());
}
public Future<String> send2(ExecutionContext ec) {
return Future.apply( () -> doSomeStuff(), ec);
}
public Future<String> send3() {
return Future.successful("OK");
}
如果要运行比简单的"OK"
更复杂的代码,则必须使用 send1
或 send2
。您想要哪一个取决于您是要使用默认的 ExecutionContext 还是让调用方决定。
如果你的 Scala 版本低于 2.12.0,上面的send1
方法将如下所示:
import scala.concurrent.*;
import scala.runtime.AbstractFunction0;
public Future<String> send1() {
return Future$.MODULE$.apply( new AbstractFunction0<String>() {
public String apply() {
return doSomeStuff();
}
}, ExecutionContext$.MODULE$.global());
}