DISQUS

Thinking inside a bigger box: Evil Behavior with Unchecked Checked Exceptions

  • .k · 2 years ago
    It can actually be a lot easier than Anders' example. See this http://weblogs.java.net/blog/crazybob/archive/2...
    for even more clever implementations. :-)

    I propose a utility-class with something like this, and we're good to go:

    public static void throwUnchecked(final Throwable pException) {
    // Type parameter to Thrower is erased at compile-time
    new Thrower().sneakyThrow(pException);
    }

    private static class Thrower {
    private void sneakyThrow(Throwable pException) throws T {
    throw (T) pException; // Unchecked cast
    }
    }

    I'm starting to think this might be useful.. Or... Maybe I'm just tired.. :-P


    .k
  • Johannes Brodwall · 2 years ago
    Hi, Harald

    The code as it stands doesn't work. I expect the template code was eaten by the HTML-izer of both my blog and/or crazy bob's blog. Here is the correct code:

    <pre>
    public static void throwIt2(final Throwable exception) {
    class Thrower<T extends Throwable> {
    private void sneakyThrow(Throwable exception) throws T {
    throw (T)exception;
    }
    }
    new Thrower<RuntimeException>().sneakyThrow(exception);
    }
    </pre>

    I don't even get a compiler warning. This is a very neat trick.