我在Play 2.4.2中使用Akka系统调度程序来执行异步任务。文档说要使用scala.concurrent.duration.Duration
类创建一个时间单位,但我收到一个编译错误,说我无法创建Duration
的实例,因为它是一个抽象类。
这是我想要异步执行的代码块:
Akka.system().scheduler().scheduleOnce(NO_DELAY, workerHandler, Akka.system().dispatcher());
NO_DELAY
定义如下:
private static final Duration NO_DELAY = new Duration.create(0, "seconds");
相关的进口声明:
import scala.concurrent.duration.*;
import java.util.concurrent.TimeUnit;
错误消息:
scala.concurrent.duration.Duration is abstract; cannot be instantiated
[error] new Duration(0, "seconds")
如何正确使用Duration
?
答案 0 :(得分:0)
您无法实例化Duration
,因为它是一个抽象类,因此您需要删除new
关键字。
因此,您可以这样做:
import scala.concurrent.duration.Duration;
private static final Duration NO_DELAY = Duration.create(0, TimeUnit.SECONDS);
甚至:
private static final Duration NO_DELAY = Duration.Zero();
答案 1 :(得分:0)
看起来自从升级到Scala 2.11.6后,FiniteDuration是一个类并且可以实例化。持久性抽象类不再存在create
方法。我用这个来解决我的问题:
private static final FiniteDuration NO_DELAY = new FiniteDuration(0, TimeUnit.SECONDS);
private static final FiniteDuration FREQUENCY = new FiniteDuration(2, TimeUnit.SECONDS);
import
语句没有变更。