[Advanced-java] How To Determine The Appropriate Exception?
Pollard, Jim
Pollard at stats.com
Sat Aug 9 03:16:59 2003
you'd also have something of a debugging problem should
someMethodOfClassBNotDefinedInClassA() ever do anything internally that
caused a ClassCastException to be thrown.
> -----Original Message-----
> From: Nikolaos Giannopoulos [mailto:nikolaos@solmar.ca]
> Sent: Friday, August 08, 2003 7:34 PM
> To: David Rosenstrauch; Advanced-java@lists.xcf.berkeley.edu
> Subject: RE: [Advanced-java] How To Determine The Appropriate
> Exception?
>
>
> > From: advanced-java-bounces@lists.xcf.berkeley.edu
> > [mailto:advanced-java-bounces@lists.xcf.berkeley.edu]On
> Behalf Of David
> > Rosenstrauch
> >
> >
> > I can't argue specifically with your rationalization, but I guess
> > I feel like using ClassCastExceptions in this way smells a bit funny
> > to me - although I can't pinpoint specifically why.
>
> I think what I dis-like most about this implementation is the
> fact that by
> using using ClassCastException error handling one would
> expect that it's
> because the author would consider a class cast exception an
> error condition
> i.e. that there should not be an instnace of any other class
> returned (other
> than the expected one) and if it isn't what I expect it to be
> then there's a
> problem - but the default value exposes its true purpose
> which is that the
> author does indeed expect that the exception may occur in
> normal flow and
> has even provisioned for it.
>
> The big problem is none of this is obvious on the surface and
> one would
> expect that ClassCastException was being used to handle error
> conditions.
>
> Better off using instanceof IMO and not confusing future
> maintainers of your
> code i.e. even if you did document this I would have to do a
> double take
> upon seeing it to fully understand what it is your trying to
> do and why your
> doing so in this manner.
>
> With instanceof its a different story as the result is a
> boolean value upon
> which you clearly specify what to do if it not an instance of
> this class -
> and thus clearly demonstrate that you would handle a class
> that is outside
> the expected by supplying a default value - signaling that it
> is not an
> error condition but more of an out of (expected) bounds condition.
>
> --Nikolaos
>
>
> > On Friday 08 August 2003 11:39 am, Silvio L. de Morais wrote:
> > > I like this kind of discussions.
> > > To keep on the same subject, I would like your opinions on
> > > a simple technique I use sometimes.
> > > Whenever I have a method that receives a generic base class
> > > as parameter (could even be Object), and I have to call a
> > > specific method defined on a derived class, I do this:
> > >
> > > public void m1(ClassA ob)
> > > {
> > > String x;
> > > try {
> > > x =
> > > ((ClassB)ob).someMethodOfClassBNotDefinedInClassA();
> > > }
> > > catch (ClassCastException cce) {
> > > {
> > > x = "Default Value";
> > > }
> > > ...
> > > }
> > >
> > > My rationalization of this is: 'Most of the time the cast
> > > will be correct, and I will not have to use the more
> > > expensive "instanceof" operator all the time'. But I was
> > > criticized before on a code review because it is not a good
> > > use of Exceptions.
> > > What do you guys think?
> >
> > _______________________________________________
> > Advanced-java mailing list
> > Advanced-java@lists.xcf.berkeley.edu
> > http://lists.xcf.berkeley.edu/mailman/listinfo/advanced-java
> >
>
>
> _______________________________________________
> Advanced-java mailing list
> Advanced-java@lists.xcf.berkeley.edu
> http://lists.xcf.berkeley.edu/mailman/listinfo/advanced-java
>