[jboss-dev] throws Throwable

Carlo de Wolf cdewolf at redhat.com
Thu May 7 02:58:58 EDT 2009


Jason T. Greene wrote:
> Carlo de Wolf wrote:
>> Andrew Lee Rubinger wrote:
>>> Jason T. Greene wrote:
>>>> Max Rydahl Andersen wrote:
>>>>>
>>>>>
>>>>> Tim Fox wrote:
>>>>>> David M. Lloyd wrote:
>>>>>>> On 05/05/2009 03:02 AM, Carlo de Wolf wrote:
>>>>>>>> What's the use case for having a public method: 
>>>>>>>> doSomething(Object someArgs...) throws Throwable ? 
>>>>>>>
>>>>>>> No valid use cases exist afaik.  Any method that throws 
>>>>>>> Throwable should die, if it's within our power to kill it. 
>>>>>> Declaring a method as "throws Throwable" forces the caller to 
>>>>>> handle the exception even if the exception/error thrown is 
>>>>>> unchecked.
>>>>> Then do throws RuntimeException
>>>>>
>>>>> Error's are *nonrecoverable* since they are OutOfMemory or hard VM 
>>>>> errors.No client can ever recover sanely.
>>>>
>>>> One valid case for throwing Throwable is a generic invocation 
>>>> mechanism
>>>> (interceptors, proxies, etc).
>>>
>>> Just because it's generic doesn't mean the caller can do anything 
>>> about it.  In that case why not just "throws Exception"?
>> As per javax.interceptor.InvocationContext.proceed().
>> But InvocationHandler.invoke throws a Throwable, which I think is wrong.
>
> IMO this is correct because the Java language allows user code to 
> throw errors, and an interceptor should be able to throw any exception 
> declared by the method it is emulating. The only alternative is to 
> wrap it with a special exception that gets unwrapped, but this is just 
> pointless copying.
>
I disagree: it should be: invoke(..) throws Exception.
Both the user code and the invoke can throw unchecked exceptions 
nonetheless. It's the handling of a checked exception that doesn't fit 
the given method signature that gets special treatment.
Ergo throws Throwable in this case is still wrong.

Carlo



More information about the jboss-development mailing list