我有以下测试方法:
public scala.concurrent.Future<String> send() {
return "OK"; //error - should wrap with future
}
如何让它返回scala future(这是java代码,所以没有找到任何示例)?
答案 0 :(得分:2)
如果您正在使用Scala 2.12.x库,这很容易。
在Scala中你会写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());
}