today i run in following problem with the AbstractValueModel:
this code will throw a NullPointerException because the method set(Object o) calls fireValueChanged() and the used listeners List is not instanciated. The List member is only instanciated if a ValueListener is registered.
ValueHolder valueHolder = new ValueHolder(new Object());
valueHolder.set( new Object());
For the listeners i would sugest an eager instanciation, but I checked the CVS History and it was eager until the check in on 18.08.04!
[ERROR] ApplicationAdvisor - null <java.lang.NullPointerException>java.lang.NullPointerException
Now, why it was changes to "lazy"? And what is the best solution to this problem?
- Back to eager instanciation?
- Check if not null on fireValueChanged?
Indeed a bug. I still think lazy is what we want, as there can be a lot of these value model objects, and potentially some without value listeners. Will fix promptly.
Well, maybe that case isn't so common after all, as otherwise my tests would've caught it. Hmm... I guess in generally I've been favoring lazy instantiation where possible in a Swing environment to help get the best possible performance.
in general i like the eager instanciation, because it is more "bug-save".
But in this case, i'm with you as there can be alot of ValueModel without listeners!
Thanks for the quick reply