I think it is reasonable to validate that the default implementation in
java.lang.Object has been overridden, but beyond that the developer
should be left to shoot themselves in the foot. I too have used Victor's
pattern of a common abstract base class that contained the
implementation and that was then subclassed for type safety.

I also believe that any move toward support of inheritance for
implementations would also require support for inheritance of the
associated identity. EJB may not support this, but other frameworks
might.

> -----Original Message-----
> From: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] On 
> Behalf Of Dain Sundstrom
> Sent: Wednesday, March 26, 2003 9:35 PM
> To: [EMAIL PROTECTED]
> Subject: Re: [JBoss-dev] Verify primary key implements equals 
> and hashCode
> 
> 
> On Wednesday, March 26, 2003, at 09:29 PM, Victor Langelo wrote:
> 
> > Dain Sundstrom wrote:
> >
> >> After some email with Bill, it looks like we can use
> >> Class.getDeclaredMethods to find which method the class implements 
> >> (you learn something new every day).  It specifically excludes 
> >> inherited methods, so we can use it to verify if a primary key has 
> >> actually implemented hashCode and equals.
> >
> > Class.getDeclaredMethod("equals", new Class[] { 
> Object.class }) should
> > also do the trick and won't return inherited methods.
> 
> I dumb; I missed that one.
> 
> >>
> >> Since equals equals is not really inheritable (see 
> Effective Java), I
> >> think we should throw a verifier error if a pk does not directly 
> >> implement it.
> >
> > I haven't read Effective Java, but this won't work for us. We
> > intentionally create derived primary key classes for each entity. 
> > These are derived from generic pk classes when the primary 
> key data is 
> > a simple primative type. The super class implements equals, 
> compareTo 
> > and hashCode. I don't see any reason these would need to be 
> > reimplemented in each derived class.
> >
> > The purpose of the derived classes is primarly for type safety.
> 
> I loaned my copy of Effective Java to a friend so I can't quote.  The 
> basic idea is that if a.equals(b) is true b.equals(a) must also be 
> true.  This means you must test for the exact type of the related 
> compare to object.  You must have code that looks something like this.
> 
> public boolean equals(object o)
> {
>     if(o instanceof MyType)
>     {
>        return value.equals((MyType).value);
>     }
>     return false;
> }
> 
> The important part is the instance of check.  I suppose you could do 
> this check with reflection... something like this
> 
> if(getClass() == o.getClass())
> 
> So I guess you are right, but we know that if one of the 
> super classes 
> (other then Object) we know that the implementation is wrong.
> 
> > public static boolean definesEquals(Class clazz)
> > {
> >    Class[] params = new Class[] { Object.class };
> >
> >    while (clazz != null && !clazz.equals(Object.class)) {
> >       try {
> >          Method m = clazz.getDeclaredMethod("equals",  params);
> >          if (m.getReturnType() == Integer.TYPE)
> >             return true;
> >       } catch (NoSuchMethodException) {
> >       }
> >       clazz = clazz.getSuperclass();
> >    }
> >    return false;
> > }
> 
> That should work.
> 
> -dain
> 
> 
> 
> -------------------------------------------------------
> This SF.net email is sponsored by:
> The Definitive IT and Networking Event. Be There!
> NetWorld+Interop Las Vegas 2003 -- Register today!
> http://ads.sourceforge.net/cgi-bin/redirect.pl?keyn0001en
> _______________________________________________
> Jboss-development mailing list [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/jboss-development
> 



-------------------------------------------------------
This SF.net email is sponsored by:
The Definitive IT and Networking Event. Be There!
NetWorld+Interop Las Vegas 2003 -- Register today!
http://ads.sourceforge.net/cgi-bin/redirect.pl?keyn0001en
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to