我有以下测试方法:
public scala.concurrent.Future<String> send() {
return "OK"; //error - should wrap with future
}
我怎样才能让它返回一个scala的未来(这是java代码,所以我没有找到任何例子)?
发布于 2017-03-24 13:00:20
如果您使用的是Scala2.12.x库,这很容易。
在Scala中,你可以编写Future(doSomeStuff())
。或者,如果您真的只想将文字包装在Future
中,则只需使用Future.successful("OK")
。在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());
}
https://stackoverflow.com/questions/42987512
复制