lombok's @SneakyThrows is a magical way of throwing checked exceptions. the lombok proof of concept spinoff 'disableCheckedExceptions' goes a lot further - though that might be a bit beyond what you were looking for.
more info: http://projectlombok.org/features/SneakyThrows.html http://projectlombok.org/disableCheckedExceptions.html On Aug 26, 7:27 pm, Marcelo Fukushima <takesh...@gmail.com> wrote: > but your version has the disadvantage of being visible > > i (and i hope christian too) was hoping for a more magical way of > throwing checked exceptions > > of course you shouldnt use those in an actual app > > > > > > On Wed, Aug 26, 2009 at 5:36 AM, Reinier Zwitserloot<reini...@gmail.com> > wrote: > > > WTF? I already posted a much better version of this in the > > supermegauber thread. no need for class file hacking. sun.misc.Unsafe > > is an even worse idea (Security Manager issues, as well as a > > dependency on running in sun VMs). > > > public class SneakyThrow { > > public static RuntimeException sneakyThrow(Throwable t) { > > if ( t == null ) throw new NullPointerException("t"); > > SneakyThrow.<RuntimeException>sneakyThrow0(t); > > return null; > > } > > > �...@suppresswarnings("unchecked") > > private static <T extends Throwable> void sneakyThrow0(Throwable t) > > throws T { > > throw (T)t; > > } > > } > > > Note also how this is much more thought through: Java does not know > > that calling this method automatically triggers a throw statement, so > > the compiler will whine that you need to return something, and the DA > > rules are all messed up. Therefore, the suggested usage is: > > > public int myMethod() { > > throw sneakyThrow(new IOException()); > > } > > > Note the 'throw' in front of 'sneakyThrow'. If you've read up on your > > JLS and JVMS, you'll know that this code is perfectly valid java (and, > > given sun's dogged adherence to backwards compatibility, should mean > > it'll continue to work just fine), and that it'll work on every java- > > compatible VM. > > > On Aug 26, 5:54 am, Christian Catchpole <christ...@catchpole.net> > > wrote: > >> Yeah, i was reading about that one. But it's only in the Sun VMs and > >> probably subject to change. > > >> But hey, I just listed this as an exercise. It just shows the > >> difference between checked and unchecked is one little byte. :) > > >> On Aug 26, 1:44 pm, Marcelo Fukushima <takesh...@gmail.com> wrote: > > >> > theres also a throwException(Throwable) in sun.misc.Unsafe - though to > >> > use that you really have to want to > > >> > On Wed, Aug 26, 2009 at 12:30 AM, Christian > > >> > Catchpole<christ...@catchpole.net> wrote: > > >> > > Compile this.. (any package you like, or no package at all) > > >> > > public class Rethrow { > >> > > public static void unchecked(Throwable t) { > >> > > t=t; > >> > > } > >> > > } > > >> > > javap reports the byte code as.. > > >> > > public static void unchecked(java.lang.Throwable); > >> > > Code: > >> > > Stack=1, Locals=1, Args_size=1 > >> > > 0: aload_0 > >> > > 1: astore_0 > >> > > 2: return > > >> > > which in hex is: > > >> > > 2A 4B B1 > > >> > > open the class file in the hex editor, search for that and change it > >> > > to: > > >> > > 2A BF B1 > > >> > > javap now reports the byte code as.. > > >> > > public static void unchecked(java.lang.Throwable); > >> > > Code: > >> > > Stack=1, Locals=1, Args_size=1 > >> > > 0: aload_0 > >> > > 1: athrow > >> > > 2: return > > >> > > jar that class up or otherwise protect it from re-write. > > >> > > In your code you can now call this without wrapping with a runtime > >> > > exception. And the stack trace is still that of the original > >> > > exception. > > >> > > } catch(Exception e) { > >> > > Rethrow.unchecked(e); > >> > > } > > >> > > Obviously, use at your own risk. No warrenties etc. :) > > >> > --http://mapsdev.blogspot.com/ > >> > Marcelo Takeshi Fukushima > > --http://mapsdev.blogspot.com/ > Marcelo Takeshi Fukushima --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "The Java Posse" group. To post to this group, send email to javaposse@googlegroups.com To unsubscribe from this group, send email to javaposse+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/javaposse?hl=en -~----------~----~----~----~------~----~------~--~---