Seems fine to me. The second suggestion is a bit awkward, but it could work... but if the type system is possible to use like that, could it be possible to have type support like this?
try (Error err) {... } catch (MyFunkyError) { ... } catch (FooError) { ... } finally { ... }
It should be easy to see that the argument to catch is a constant type.