PDA

View Full Version : AbstractValueModel


claudio
Aug 23rd, 2004, 08:11 AM
Hi,

today i run in following problem with the AbstractValueModel:


ValueHolder valueHolder = new ValueHolder(new Object());
valueHolder.set( new Object());


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.


[ERROR] ApplicationAdvisor - null <java.lang.NullPointerException>java.lang.NullPointerException
at org.springframework.rules.values.AbstractValueMode l.fireValueChanged(AbstractValueModel.java:63)
at org.springframework.rules.values.ValueHolder.set(V alueHolder.java:40)


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!

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?
- ...

siu
Claudio

Keith Donald
Aug 23rd, 2004, 08:24 AM
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.

Keith Donald
Aug 23rd, 2004, 08:26 AM
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.

claudio
Aug 23rd, 2004, 08:57 AM
Keith,

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
Claudio