将字符串包装在 scala 未来从 java 代码中



我有以下测试方法:

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"更复杂的代码,则必须使用 send1send2 。您想要哪一个取决于您是要使用默认的 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());
}

最新更新