Avoiding NPEs caused by indirect call
This is just an example:
public class Model extends AbstractModel {
private final PropertyChangeSupport propertyChangeSupport;
public Model (Object source) {
propertyChangeSupport = new PropertyChangeSupport(source);
}
public void addPropertyChangeListener(PropertyChangeListener
listener) {
propertyChangeSupport.addPropertyChangeListener(listener);
}
public void firePropertyChange(String propertyName, Object
oldValue, Object newValue) {
propertyChangeSupport.firePropertyChange(propertyName,
oldValue, newValue);
}
}
public abstract class AbstractModel {
public void setSomeValue(Value value) {
firePropertyChange("someProperty", oldValue, value);
}
}
Imagine that I want to introduce PropertyChangeSupport to my custom
class. I'm bound to provide source for the event in a
PropertyChangeSupport constructor at the same time I'm getting
NullPointerException in Model#firePropertyChange() every time
AbstractModel#setSomeValue(Value) is called before Model object has
been constructed
OK There are a few ways of rectifying the problem, but none of them
appear to me as a good solution. I could override setSomeValue method,
but I do need its functionality and don't want to replicate it.
I could add validation: if(propertyChangeSupport == null)
{super.firePropertyChange(...)} but this is also kind of a hack which
I don't really like.
What would be your advice?