Thanks alot to all! My bad: I completely forgot that “catch (foo)” implies Exception foo, and not Throwable foo. OC
On 12. 10. 2016, at 18:59, Jim White <james.paul.wh...@gmail.com> wrote: > The recommended way to have an exception that can't be caught except in > specifically intended places is to extend java.lang.Throwable (or if > appropriate to the use case, java.lang.Error). Those work just like > Exception except that they don't have to be declared in the method signatures > where they are throwable from and of course "catch (Exception ex) ..." > doesn't catch them since they are not subclasses of Exception. > > -- Jim > > > On Wed, Oct 12, 2016 at 9:38 AM, Dinko Srkoč <dinko.sr...@gmail.com> wrote: > On 12 October 2016 at 18:27, Søren Berg Glasius <soe...@glasius.dk> wrote: > > This question should be asked in us...@groovy.apache.org > > > > And the answer to the question must be, no. But you could check if > > Well, strictly speaking, that's not quite true ;-) > > @groovy.transform.InheritConstructors > class MySpecialException extends Throwable {} > > try { > try { > throw new MySpecialException("foo") > } catch (ex) { > println "never got here!" > } > } catch (MySpecialException ex) { > println "did catch that $ex" > } > > but I don't think I would recommend that :-) > > Cheers, > Dinko > > > > > } catch (exception) { > > if(exception instance MySpecialException) throw exception > > println "bar caught $exception" > > } > > > > > > > > Best regards, > > Søren Berg Glasius > > > > Hedevej 1, Gl. Rye, 8680 Ry, Denmark > > Mobile: +45 40 44 91 88, Skype: sbglasius > > --- Press ESC once to quit - twice to save the changes. > > > > From: o...@ocs.cz <o...@ocs.cz> > > Reply: dev@groovy.apache.org <dev@groovy.apache.org> > > Date: 12. oktober 2016 at 18.24.20 > > To: dev@groovy.apache.org <dev@groovy.apache.org> > > Subject: non-catchable exception? > > > > Hello there, > > > > is it possible to create an exception which will *not* be caught by a > > general handler, only by a specific one? So that e.g., the following code > > > > === > > class MySpecialException extends Exception { /* whatever magic needed here > > */ } > > ... > > def foo() { > > throw new MySpecialException() > > } > > def bar() { > > try { > > foo() > > } catch (exception) { > > println "bar caught $exception" > > } > > } > > static main(args) { > > try { > > bar() > > } catch (MySpecialException special) { > > println "special exception" > > } > > } > > === > > > > would print out "special exception" and *not* "bar caught..."? > > > > The reason is that the code I at the moment work with contains _lots_ of > > generic try/catch harnesses at different levels of code; they generally > > report the error caught and then go on processing the input. Now I would > > need a „special” exception which would not be caught by any of them, to > > abort the processing immediately. > > > > Adding a separate "catch (MySpecialException goup) { throw goup }" statement > > to each of all those already existing harnesses -- which would be, I guess, > > conceptually the right thing to do -- would be rather at the inconvenient > > side. > > > > Thanks, > > OC > > >