Yes, the desire for the throw dawned on me. Not that you included such javadoc in this thread.
On Aug 27, 2:59 am, Reinier Zwitserloot <reini...@gmail.com> wrote: > The pain of being an idiot, not reading the javadoc on sneakyThrows, > and presuming that the return value has any meaning whatsoever is not > something I'm going to get concerned about. Everyone is an idiot > sometime, Even you Reinier? Not possible :) > but there's a line, and that's far removed from it. > > Contrast this to the sheer amount of shit you have to waltz through, > not to mention the lack of compiler help (as the compiler will > _erroneously_ think the thread will keep going and thus FAIL to tell > you about unreachable code!) - which makes this a clear cut case. My > way is superior :P > > On Aug 26, 11:20 am, Christian Catchpole <christ...@catchpole.net> > wrote: > > > > > Ok, that's cool. But don't you think it's weird that the return value > > isn't real. I mean, might someone not change the 'throw' to another > > statement and get unexpected results? > > > I stand by my 'implementations' purity.. even if its not readily > > compilable. > > > On Aug 26, 6:36 pm, 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 --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---