----- "sebb" <seb...@gmail.com> a écrit :

> On 19/06/2009, Phil Steitz <phil.ste...@gmail.com> wrote:
> > luc.maison...@free.fr wrote:
> >
> > > ----- "Bill Barker" <billwbar...@verizon.net> a écrit :
> > >
> > >
> > >
> > > > ----- Original Message ----- From: <luc.maison...@free.fr>
> > > > To: "Commons Developers List" <dev@commons.apache.org>
> > > > Sent: Wednesday, June 17, 2009 2:58 PM
> > > > Subject: Re: svn commit: r785552 - in
> > /commons/proper/math/trunk/src:
> > > >
> > > > java/org/apache/commons/math/complex/Complex.java
> > > > site/xdoc/changes.xml
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > > ----- "Phil Steitz" <phil.ste...@gmail.com> a écrit :
> > > > >
> > > > >
> > > > >
> > > > > > Sorry if I am being dense here. What serialization problem
> do the
> > > > > >
> > > > > >
> > > > >
> > > > new
> > > >
> > > >
> > > > >
> > > > > > fields cause, exactly? The class is immutable and they are
> set by
> > > > > >
> > > > > >
> > > > >
> > > > the
> > > >
> > > >
> > > > >
> > > > > > constructor.
> > > > > >
> > > > > >
> > > > > It takes more space to store. If someone uses serialization to
> store
> > > > >
> > > > >
> > > > or
> > > >
> > > > > send a bunch of complex >this will vastly increase the load.
> > > > >
> > > > >
> > > > The main problem is that the fields can be either transient or
> final,
> > > > but not both (or rather, you can't reset the value of final
> fields in
> > readObject).  I have a slight preference for transient for the
> reason
> > > > Luc gave (a BlockFieldMatrix<ComplexField> will get large
> quickly), and
> > > > have no problem doing the change myself.  But I can wait for
> other
> > opinions.
> > > >
> > >
> > > +1 for that.
> > > You can reset final fields in readObject, with some
> java.lang.reflect
> > dirty tricks. Look at the DeserializeReal{Vector, Matrix} methods
> in
> > MatrixUtils.
> > >
> > >
> >  +1
> 
> Complex is not currently a final class, but if there are no use-cases
> for it to be extended it could be made so, and one could then use the
> "defensive readResolve" idiom (Effective Java item 57):
> 
> private Object readResolve(){
>     return new Complex(real, imaginary);
> }

I like this!

Luc

> 
> This would still work even if Complex remained non-final, however
> sub-classes could potentially subvert the deserialisation by
> overriding the readResolve. Maybe that is a proce worth paying.
> 
> The above code might be slightly slower than using reflection (or
> maybe not), but it will always work regardless of security managers.
> 
> >  Phil
> >
> >
> > > Luc
> > >
> > >
> > >
> > > >
> >
> ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail:
> > dev-unsubscr...@commons.apache.org
> > > > For additional commands, e-mail: dev-h...@commons.apache.org
> > > >
> > > >
> > >
> > >
> >
> ---------------------------------------------------------------------
> > > To unsubscribe, e-mail:
> > dev-unsubscr...@commons.apache.org
> > > For additional commands, e-mail: dev-h...@commons.apache.org
> > >
> > >
> > >
> >
> >
> >
> ---------------------------------------------------------------------
> >  To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> >  For additional commands, e-mail: dev-h...@commons.apache.org
> >
> >
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to