Checked exceptions [Re: Hijacking]

Bruno Medeiros brunodomedeiros+spam at com.gmail
Fri Aug 10 03:15:47 PDT 2007


eao197 wrote:
> On Wed, 08 Aug 2007 15:38:14 +0400, Bruno Medeiros 
> <brunodomedeiros+spam at com.gmail> wrote:
> 
>> Bill Baxter wrote:
>>> Nick Sabalausky wrote:
>>>> "Rioshin an'Harthen" <rharth75 at hotmail.com> wrote in message 
>>>> news:f974u9$9k1$1 at digitalmars.com...
>>>>> "Walter Bright" <newshound1 at digitalmars.com> kirjoitti viestissä 
>>>>> news:f95leh$hn4$1 at digitalmars.com...
>>>>>> It might be one of those things like exception specifications 
>>>>>> where everyone says it's a good idea but guiltily hate in secret <g>.
>>>>> Exception specification *is* a good idea. Although I do hate it - 
>>>>> try to remember what a specific method may throw when you write 
>>>>> your code, especially if the error is ambiguous like "Unhandled 
>>>>> exception" it's really irritating - but I hate unspecified 
>>>>> exceptions even more, as the problem then is to even remember to 
>>>>> put in the necessary try-catch-finally blocks.
>>>>
>>>> Not to start a big big debate on it, but my own personal feeling on 
>>>> that (after having used a fair amount of it) is that the 
>>>> specification of exceptions belongs in generated documentation 
>>>> (whether javadoc-style or as part of the IDE as with 
>>>> "some_function() -> Called By..."). I normally prefer having to 
>>>> explicity specify things (yea, strong-typing fan here ;) ), but 
>>>> personally, I find it overkill in this case. (Not to mention it gave 
>>>> me flashbacks of writing C/C++ headers. j/k ;) ).
>>>  I agree with this 100%.  With check exceptions it just becomes too 
>>> annoying and verbose.  Without them, often it is too difficult to 
>>> find out what exceptions are possible for a function to throw.
>>>  So the right place seems to be an analysis / doc-generation tool / IDE.
>>>  --bb
>>
>> Interesting thing I'd like to mention, again about how IDEs affect the 
>> language design and influence it's advantages and disadvantages.
>> I too find checked exceptions annoying, but this is an example of a 
>> language disadvantage has been practically nullified by the IDE (JDT).
>>
>> First I took a slightly modified ExceptionAdapter class such as the 
>> one from Bruce Eckel's article:
>> http://www.mindview.net/Etc/Discussions/CheckedExceptions
>> (basicly ExceptionAdapter is class that wraps a checked exception in 
>> an unchecked exception, allowing it to be thrown unchecked)
>> So when you have something like this:
>>    foo.doSomething(); // throws a normal exception
>> and Java will complain that an exception is thrown, you add this:
>>    try {
>>      foo.doSomething(); // throws a normal exception
>>    } catch(FooException fe) {
>>      ExceptionAdapter.unchecked(fe);
>>    }
>> and there is no longer a compiler error (unchecked is a static method 
>> that wraps the exception), without having needed to put throws clauses 
>> in all method along the call hierarchy.
>> This is an interesting workaround, but it is still annoying to have to 
>> write that try-catch code whenever an exception is thrown.
>> The second part is where JDT comes in. Whenever you have this:
>>    foo.doSomething(); // throws a normal exception
>> the IDE compiler will show and highlight the error, and then you can 
>> press Ctrl+1 on the error (Quick-Assist), showing a list of possible 
>> fixes, one of them being "Surround with Try-Catch". If you select it, 
>> JDT will automatically add the try-catch code, like this:
>>    try {
>>      foo.doSomething(); // throws a normal exception
>>    } catch(FooException fe) {
>>      // TODO: catch exception here
>>    }
>> Note that the catch clause is automatically set to the thrown 
>> exception. But furthermore you can change the template of code that is 
>> created with this try-catch quick-fix, so that instead of the "// 
>> TODO:" line, you put the "ExceptionAdapter.unchecked(...);" line. So 
>> now whenever this quick fix is invoked, it will automatically generate 
>> all necessary code, and you're now able to avoid the checked exception 
>> problem with just a few keystrokes (Ctrl+1, Down, Enter). :)
>> As an added bonus, if some time you feel the need to rigorously 
>> specify your code, you can then search for calls of the 
>> ExceptionAdapter.unchecked method, to find points where you can turn 
>> unchecked exceptions into checked ones.
> 
> I don't agree (almost complitely). Checked expession is not simply 
> annoying. Sometimes they lead to bad-style and erroneous code. For 
> example imagine you redefine some method:
> 
> class MySpecializedClass extends SomeGeneralClass
> {
>   public void someMethod() throws DomainSpecificException { ... }
> }
> 
> but you need to use temporary file in someMethod() implementation (or 
> need to run some external tool, or need to use some crypto library). And 
> File.createTempFile throws IllegalArgumentException or IOException or 
> SecurityException, but no one of them is in someMethod 'throws' clause.
> 
> In such case you have only two possibilities: wrap the exception which 
> is thrown by File.createTempFile into some another exception (it is good 
> if DomainSpecificException allows that, but in an usual case it don't) 
> or catch and hide the original exception. As I seen in the past many 
> developers prefered catch and hide exception. And this is not a good 
> approach I think.
> 
> So in my opinion it is better to write code which doesn't depend on 
> particular kind of exception. Assumption that any part of code could 
> throws any kind of exception lead to more reliable software (Erlang is 
> an evidence).
> 

I don't see how that is disagreeing with what I said before. Note that 
the above doesn't hide the exception (as in, make it disappear), it gets 
re-thrown as an unchecked exception.

-- 
Bruno Medeiros - MSc in CS/E student
http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D



More information about the Digitalmars-d mailing list