我怎样才能完成以下工作:
class Foo extends javax.swing.undo.UndoManager {
// increase visibility - works for method
override def editToBeUndone: javax.swing.undo.UndoableEdit = super.editToBeUndone
// fails for field
def edits: java.util.Vector[javax.swing.undo.UndoableEdit] = super.edits
}
注意edits
是一个受保护的领域CompoundEdit
(超类UndoManager
)。我想要一个具有相同名称的公共访问器来读取该字段。我该怎么做呢?
<console>:8: error: super may be not be used on variable edits
def edits: java.util.Vector[javax.swing.undo.UndoableEdit] = super.edits
^
嗯,总有反思。
class Foo extends javax.swing.undo.UndoManager {
def edits(): java.util.Vector[javax.swing.undo.UndoableEdit] =
classOf[javax.swing.undo.CompoundEdit].
getDeclaredField("edits").get(this).
asInstanceOf[java.util.Vector[javax.swing.undo.UndoableEdit]]
}
您还可以通过嵌套来消除这两个调用的歧义,尽管这很丑陋:
class PreFoo extends javax.swing.undo.UndoManager {
protected def editz = edits
}
class RealFoo extends PreFoo {
def edits() = editz
}
你确实需要()
,但是——如果它不与字段本身冲突(并且您不能覆盖val
with a def
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)