【发布时间】:2011-07-26 22:32:47
【问题描述】:
我正在尝试扩展 javax.swing.Timer,但它只有一个构造函数,即
Timer(int delay, ActionListener listener)
我不希望 Scala 中的子类在其构造函数中使用 Java ActionListener。我在very old thread 中读到“没有办法直接调用超类构造函数;你必须通过你自己类的主构造函数”,所以看起来我在主类中坚持使用ActionListener构造函数。所以我添加了一个辅助构造函数:
case class TimerEvent (source: AnyRef) extends swing.event.Event
class ScalaTimer2 (delay: Int, listener: java.awt.event.ActionListener)
extends javax.swing.Timer(delay, listener) with swing.Publisher {
outer =>
def this(delay: Int) = {
this(delay, new java.awt.event.ActionListener {
def actionPerformed(e: java.awt.event.ActionEvent) {
publish(TimerEvent(outer)) // <-- publish not recogonized
}
})
// publish(TimerEvent(outer)) // <-- publish recognized here
}
}
但是我得到一个编译错误error: not found: value publish ...为什么?以及如何解决?
【问题讨论】:
-
对于那些研究这个问题的人,请注意问题 SI-4842 导致编译器崩溃:issues.scala-lang.org/browse/SI-4842
标签: scala constructor