调用trait函数时,不调用Java的TimerTask run()函数

时间:2015-05-20 06:46:53

标签: java scala timer timertask traits

我有以下代码:

trait IntervalUpdate {

  val updateInterval: Long

  def onUpdateTask(): Unit

  val timer: Timer = new Timer()


  val timerTask = new TimerTask {
    override def run(): Unit =  onUpdateTask()
  }

  timer.scheduleAtFixedRate(timerTask, updateInterval, updateInterval)
}

我将这个特性混合到一些类中并覆盖onUpdateTask方法。

问题在于,当我这样做时,run()函数根本就不会被调用。

但是,如果我执行以下操作:override def run(): Unit = println("message"),则会调用它。

我觉得这与TimerTaskTimer有关Jave代码并尝试使用mixins有关,但我认为这应该有效。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我得到了它的工作。我将代码更改为:

trait IntervalUpdate {

  val updateInterval: Long

  def onUpdateTask:() => Unit

  val timer: Timer = new Timer()


  val timerTask = new TimerTask {
    override def run(): Unit =  onUpdateTask()
  }

  timer.scheduleAtFixedRate(timerTask, updateInterval, updateInterval)
}