在Java代码中包装scala中的字符串

时间:2017-03-23 21:39:06

标签: java scala

我有以下测试方法:

public scala.concurrent.Future<String> send() { 
  return "OK"; //error - should wrap with future
} 

如何让它返回scala future(这是java代码,所以没有找到任何示例)?

1 个答案:

答案 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"更复杂,则必须使用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());
}