在Java Play 2.4.2中调度异步任务:scala持续时间编译错误

时间:2015-07-23 22:18:38

标签: java scala playframework-2.0 akka

我在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

2 个答案:

答案 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语句没有变更。