Many thanks Scott.

I'm a firestarter, twisted firestarter

> -----Message d'origine-----
> De : [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED]]De la part de
> Scott M Stark
> Envoyé : mardi 10 juillet 2001 20:32
> À : [EMAIL PROTECTED]
> Objet : [JBoss-dev] Fool proof? I think not.
>
>
> // TestPK.java
> class AccountPK implements java.io.Serializable
> {
>    private int _hashCode = Integer.MIN_VALUE;
>    public java.lang.String id;
>
>    public AccountPK(java.lang.String id)
>    {
>       this.id = id;
>    }
>    public int hashCode()
>    {
>       if (_hashCode == Integer.MIN_VALUE)
>       {
>          _hashCode += this.id.hashCode();
>       }
>       return _hashCode;
>    }
>    public boolean equals(Object obj)
>    {
>       AccountPK pk = (AccountPK)obj;
>       boolean eq = true;
>       eq = eq && this.id.equals(pk.id);
>       return eq;
>    }
> }
>
> public class TestPK
> {
>     public static void main (String args[])
>     {
>        AccountPK key1 = new AccountPK("key1");
>        AccountPK key2 = new AccountPK("key1");
>        CacheKey key3 = new CacheKey(key1);
>        CacheKey key4 = new CacheKey(key2);
>        if( key3.hashCode() != key4.hashCode() )
>           System.out.println("key3, key4 hashCode test failed");
>        if( key3.equals(key4) == false )
>           System.out.println("key3, key4 equals test failed");
>
>        AccountPK key11 = new AccountPK("key1");
>        AccountPK key21 = new AccountPK("key1");
>        key21.hashCode(); // Cause key21._hashCode value to update
>        CacheKey key31 = new CacheKey(key11);
>        CacheKey key41 = new CacheKey(key21);
>        if( key31.hashCode() != key41.hashCode() )
>           System.out.println("key31, key41 hashCode test failed");
>        if( key31.equals(key41) == false )
>           System.out.println("key31, key41 equals test failed");
>     }
>
> }
>
> Produces:
>
> key31, key41 hashCode test failed
> key31, key41 equals test failed
>
> Why? Because Serialization includes the private state of the
> object. This is
> a perfectly valid PK which is not handled correctly by CacheKey. If the
> _hashCode value is marked as transient all works. The assumption being
> made by CacheKey is that the only ivars in the PK are its fields
> that define
> its identity.
>
>
>
>
> _______________________________________________
> Jboss-development mailing list
> [EMAIL PROTECTED]
> http://lists.sourceforge.net/lists/listinfo/jboss-development
>


_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com


_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to