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
-~----------~----~----~----~------~----~------~--~---

Reply via email to