我正在创建一个扩展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/