gpt4 book ai didi

java - 从继承的 protected Java 字段创建公共(public)访问器

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:53:07 25 4
gpt4 key购买 nike

我怎样才能完成以下工作:

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
}

请注意,editsCompoundEdit(UndoManager 的父类(super class))中的 protected 字段。我想要一个读取该字段的同名公共(public)访问器。我该怎么做?

<console>:8: error: super may be not be used on variable edits
def edits: java.util.Vector[javax.swing.undo.UndoableEdit] = super.edits
^

最佳答案

嗯,总有反射(reflection)。

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
}

您确实需要 (),但它不会与字段本身冲突(并且您不能用 def< 覆盖 val/)。

关于java - 从继承的 protected Java 字段创建公共(public)访问器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15591901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com