X extends Exception
In response to Generic Throws: Another Little Java Idiom
Unfortunately, the "X extends Exception" falls apart fairly quickly with the current generation of type erasure. You can get a little way down this path, but soon you'll hit string compile errors, which go away, depending on the order in which you compile / recompile things. The problem is two fold:
- Java has type erasure
- RuntimeException extends Exception, but doesn't have to be declared in a throws clause.
So, the compiler may or may not be able to determine if a method throws a typed exception.
If this technique worked, it would be useful for implementing closure like features. For example:
<geshi lang="java"> public interface BlockBase<I, O, X extends Throwable> {
O eval(I item) throws X;
}
public <X extends Throwable> RArray<T> findAll(BlockBase<T, Boolean, X> block) throws X { RArray<T> arr = new RArray<T>(); for (T t : this) { if (block.eval(t)) { arr.append(t); } } return arr; }
</geshi>
You'll notice in code like fork-join framework, they rely wholly on unchecked exceptions.