Bruce Chapman said the following on 04/14/10 20:49:
Martin Buchholz wrote:
I don't think you're going to find enough support for adding
rarely used new methods to existing exception classes.
Of course it is rare at present - it doesn't yet exist. So "rarely used" is at this point subjective and hypothetical. My feeling is that it would be useful, if you think not, then that is another data point. Maybe a weekly survey question for java.net? - I am sure they could find a way to turn it into 5 choices. :)

I agree with Martin these methods are unnecessary and would be rarely used if they existed. That's subjective of course but all library design involves some considered subjectivity about likelihood of use.

There's already a clear way to indicate to human readers
that an exception should be ignored or is expected

catch (SomeException ignored) { }

catch (SomeException expected) { }

Oh dear, I thought we had finally got away from "magic name" solutions.

I don't see anything wrong with this. On the other hand I find it completely <insert strong adjective> to signify you are ignoring an exception by calling an ignore() method that does nothing. This isn't a coding issue it is a documentation issue - what is the intent? Why is the occurrence of the exception of no consequence? Using:

catch (SomeException ignore) { }

is fine though perhaps a little obscure; using

catch (SomeException ignore { /* reason we can ignore*/ }

is better. Using:

catch (SomeException e) { e.ignore(); }

is just pointless and just as obscure.

Of course in JDK7 we'll be able to

catch (@Ignored SomeException ex) { }

catch (@Impossible SomeException ex) { }

Annotations are overkill for this.

As for "impossible":

throw new Error("can't happen");

Seems fine to me.

My 2c.

David Holmes

and maybe that is an OK option. However getting those annotations added to the JDK is probably less likely than a couple of methods on Exception. Also the @Impossible (or a magic variable name) can't throw an AssertionError without a language change and is therefore significantly inferior to an impossible() method.
All we need for true happiness is for all linty tools to
buy into this convention and to advertise it as the
One True Way to ignore exceptions.
ahhh Nirvana, but we can't MAKE that happen - but we can add methods (or annotations) to the JDK.
One thing we definitely can do is to add a new constructor
to AssertionError, that takes a cause as an argument,
consistent with other exceptions.
Yeah, that was a minor niggle - I'll check for an RFE and get the ball started on that.
There is a bit of a religious argument as to whether
AssertionError should only be thrown by an assert statement.
Is there a better Error to throw? Hmmmm...checking the JDK sources, it seems that
AssertionError is the defacto standard.
I will sponsor a patch to add the new constructor to AssertionError,
which will at least make the boilerplate for throwing an
impossible error smaller.
I guess if it had been the intention to only throw those from asserts, then the constructor could have been private to stop other uses, and let the language and compiler do some magic to let it be so, but that didn't happen.

Thanks

Bruce

Reply via email to