java - 访问子类中的私有(private)字段

标签 java inheritance

我正在创建一个扩展PropertyChangeSupport的类。我当前想要做的是覆盖 firePropertyChange():

firePropertyChange,因为它是在 PropertyChangeSupport 中实现的:

public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
    if (oldValue == null || newValue == null || !oldValue.equals(newValue)) {
        firePropertyChange(new PropertyChangeEvent(this.source, propertyName, oldValue, newValue));
    }
}

我打算覆盖 firePropertyChange:

public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
    if (oldValue == null || newValue == null || !oldValue.equals(newValue)) {
        firePropertyChange(new JoystickPropertyChangeEvent(this.source, propertyName, oldValue, newValue)); //compile error: source is not visible
    }
}

JoystickPropertyChangeEvent 是我创建的一个类,它扩展了 ProperyChangeEvent

问题是我的预期实现无法编译,因为源代码是私有(private)的,并且在 PropertyChangeSupport 中没有 getters,因此子类无法访问它。我无法修改 PropertyChangeSupport 的代码。

有没有比将 source 的私有(private)副本作为我的子类的字段更优雅的方法来解决这个问题?

相关问题: How to access the private variables of a class in its subclass?

最佳答案

既然你扩展了PropertyChangeSupport,你在构造函数中调用super()是否正确? PropertyChangeSupport 的原始构造函数将source(即 bean)作为参数。

public PropertyChangeSupport(Object sourceBean)

sourceBean 参数是您想要的source。使用您自己的私有(private)成员来保存该引用。然后您可以在 firePropertyChange() 方法中使用它。

public static class MyPropertyChangeSupport extends PropertyChangeSupport {
    private Object mySource;

    public MyPropertyChangeSupport(Object sourceBean) {
        super(sourceBean);
        // store the bean reference in your field
        this.mySource = sourceBean;
    }

    @Override
    public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
        if (oldValue == null || newValue == null || !oldValue.equals(newValue)) {
            // use mySource here
            firePropertyChange(new JoystickPropertyChangeEvent(mySource, propertyName, oldValue, newValue)); 
        }
    }
}

关于java - 访问子类中的私有(private)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17857284/

相关文章:

java - 使用输入流读取 java 属性文件

java - 如何在 TomCat 9.0 中部署 RESTEasy 应用程序?

java - 为什么在扩展抽象类中需要另一个构造函数?

java - 查找所有 UUID MongoRepository

Java比较两个数组并检查第一个数组是否与第二个数组连续

java - 我有这么长的 Java 代码,但我不知道如何缩短它

java - Android ScrollView 中的 ClassCastException

c# - 派生类型和泛型

c# - 如何避免 GUI 控件和域对象之间的并行继承层次结构

java - 遗产继承令人难以置信