On Dec 10, 10:52 pm, "Stephen C. Gilardi" <[EMAIL PROTECTED]> wrote:
> On Dec 10, 2008, at 4:38 AM, Ralf Bensmann wrote:
>
> > Being a Java trainer for a long time, we talk with students about
> > the "handle-or-declare rule" in Java and the two types of
> > exceptions: "checked" (declared) and "unchecked" (runtime). So I
> > prefer using a RuntimeException because no exception was specified.
>
> I'm inclined to accept the recommendation to make RuntimeException the
> default. I see that Clojure's Java source code uses both. It seems to
> me that within Clojure, the distinction doesn't matter, but in the
> case of Java interop, RuntimeExceptions would be more in keeping with
> what Clojure's "never declare them" philosophy.
>
> Does anyone have any more advice on this?
>

Clojure doesn't have 'checked' exceptions. They are a bad idea, and a
misfeature of Java, bad enough with interfaces but completely
incompatible with closures. As a result of the flawed logic that has
grown up around this misfeature, in Java you might choose between
checked and non-checked based on whether you thought a caller could do
anything about it - if not, use unchecked, thus making your method one
that didn't require explicit handling.

Given that there are no 'checked' exceptions in Clojure, the
distinction is moot, except in the case of Java interop, where, at
least through the IFn interface, all Clojure calls declare Exception.
RuntimeException is a particularly dubious notion, a special exemption
granted to those exceptions the Java runtime might throw, created in
acknowledgment of the insufferable pain it would cause to use the
checked exception system for those. If it were a fixed set it would be
one thing - every caller could expect one of those (enumerated,
documented) exceptions, or a declared one. But RuntimeExceptions are
an open set - it's just plain goofy.

Clojure's Java code throws explicit RuntimeExceptions only in those
places where the checked exception system precludes it from letting an
Exception flow out, and it pains me every time.

I guess my recommendation is, if there is an existing exception type
(checked or unchecked) that roughly matches your problem, throw that,
else throw Exception. In this case, perhaps the default should be
IllegalArgumentException.

Rich


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to