True, but I don't think many are aware of this. The JDK7 proposal by
Joshua Bloch specifically adds the multi-scoping aspect over the
existing C# implementation, which only allows multi-scoping of the
same type.

Constructs that minimizes variable leakage into scope space (temporary
variables) appeals somewhat to me, something Lombok can't possible
address without an ElementType.TYPE_BLOCK.

I assume this is also a major reason why certain well known people on
the Coin mailing-list claim this should be handled in the language
rather than by annotations. There's a profound fear of the misuse of
annotations, though personally I consider annotation DSL burial (JPA)
way more abusive than say Lombok.

/Casper

On 1 Sep., 19:47, Reinier Zwitserloot <reini...@gmail.com> wrote:
> Yes, you can scope to your hearts content with {} blocks. For those
> not aware of this:
>
> There's a rarely used feature of the java language: separate blocks.
>
> You can put { (statements) } anywhere in java code where a statement
> is legal. Like any other occurrence of {} to delimit code, any
> variable declarations inside the {} are not visible outside the
> brackets. So, this:
>
> public void test() {
>     int foo = 1;
>     {
>         int bar = foo + 2;
>     }
>     //MARK
>
> }
>
> is legal, and 'bar' will not be visible at the mark. Because of this
> feature, @Cleanup is what it is; if you want an explicit close point,
> then use a block. In practice, a decent amount of resources you may
> want to @Cleanup require try/catch blocks, which are of course also
> their own scope:
>
> try {
>     @Cleanup InputStream in = new FileInputStream(path);} catch ( IOException 
> e ) {
>
>     throw new DatabaseAccessException(e);
>
> }
>
> After all, the act of creating a resource tends to throw the same
> kinds of exceptions as using the resource.
>
> Funny thing, this @Cleanup thing. I never considered this style of ARM
> until forced into it by lombok's particular limitations (Specifically:
> it needs code that passes the tokenizer and tree maker before lombok
> can run its transformations), and then it turns out it's in many ways
> superior to the existing proposal. I don't think coin is going to go
> this route though, it's a bit late for such a drastic change.
>
> On Sep 1, 4:31 pm, Jess Holle <je...@ptc.com> wrote:
>
> > I actually prefer @Cleanup to the JDK 7 proposal in that it presumably
> > just cleans up at the end of the variable's scope ala C++.
>
> > If you need ordering amongst several @Cleanup variables, then you can
> > always introduce {...} scoping, right?  If so, then I'd rather introduce
> > such things only as needed rather than the JDK 7 proposal's approach.
>
> > Roel Spilker wrote:
> > > Casper,
>
> > > You are correct. I just wanted the other readers to know that it is
> > > not limited to "close". It is however limited to no-args methods.
>
> > > Roel
>
> > > On Sep 1, 4:10 pm, Casper Bang <casper.b...@gmail.com> wrote:
>
> > >> I think you misunderstood Roel. I am aware of the method name argument
> > >> override, I was merely exploring the different implementations and
> > >> implications of these two ARM blocks. The JDK7 version would have to
> > >> rely on a new interface Disposable being added to the libraries, as
> > >> the abomination known as checked exceptions (IOException) once again
> > >> gets in the way of simply using the existing Closable. Lombok couldn't
> > >> care less what it's closing and could in fact be used as a C++
> > >> deconstructor. Correct?
>
> > >> /Casper
>
> > >> On 1 Sep., 15:47, Roel Spilker <r.spil...@gmail.com> wrote:
>
> > >>> Caster, that is not entirely correct. The "close" methode (actually,
> > >>> close is just the default, you can specify an other method name if you
> > >>> want) will be called when the variable goes out of scope.
> > >>> Unfortunately, java does not allow an annotation on a code block. So
> > >>> an equivalent programm would be:
>
> > >>> {
> > >>>   @Cleanup InputStream in = new FileInputStream(...);
> > >>>   // Do something else...
>
> > >>> }
>
> > >>> On Sep 1, 3:10 pm, Casper Bang <casper.b...@gmail.com> wrote:
>
> > >>>> The neat thing about this is that we do not have to wait until the
> > >>>> Java API has been retrofitted with the Disposable interface. However,
> > >>>> you won't get the scope limitation benefits (the in and out variable
> > >>>> is scoped the whole method). I kind of wish we could use annotations
> > >>>> on blocks, so this would be possible instead:
>
> > >>>> @Cleanup{
> > >>>>     InputStream in = new FileInputStream( ... );
> > >>>>     // Do something...
>
> > >>>> }
>
> > >>>> @Cleanup{
> > >>>>     InputStream in = new FileInputStream( ... );
> > >>>>     // Do something else...
>
> > >>>> }
>
> > >>>> /Casper
>
> > >>>> On 1 Sep., 14:53, Roel Spilker <r.spil...@gmail.com> wrote:
>
> > >>>>> For ARM-blocks you can have a look at the @Cleanup annotation of
> > >>>>> Lombok and have ARM-blocks for Java right now!
>
> > >>>>> The following code will close both streams correctly after they run
> > >>>>> out of scope.
>
> > >>>>> import lombok.Cleanup;
> > >>>>> import java.io.*;
>
> > >>>>> public class CleanupExample {
> > >>>>>         public static void main(String[] args) throws IOException {
> > >>>>>                 @Cleanup InputStream in = new 
> > >>>>> FileInputStream(args[0]);
> > >>>>>                 @Cleanup OutputStream out = new 
> > >>>>> FileOutputStream(args[1]);
> > >>>>>                 byte[] b = new byte[10000];
> > >>>>>                 while (true) {
> > >>>>>                         int r = in.read(b);
> > >>>>>                         if (r == -1) break;
> > >>>>>                         out.write(b, 0, r);
> > >>>>>                 }
> > >>>>>         }
>
> > >>>>> }
>
> > >>>>> Seehttp://projectlombok.org/features/Cleanup.htmlformore
> > >>>>> information
>
> > >>>>> On Sep 1, 2:19 pm, "joel.neely" <joel.ne...@gmail.com> wrote:
>
> > >>>>>> According to coverage 
> > >>>>>> athttp://arstechnica.com/apple/reviews/2009/08/mac-os-x-10-6.ars/10
> > >>>>>> , Snow Leopard, the latest version of Mac OS X, added "blocks" to C.
> > >>>>>> The article illustrates this new language construct with the by-now
> > >>>>>> canonical ARM and home-grown-control-structure examples.
>
> > >>>>>> Hey, Java! Closures to the left of me [JRuby, Scala, etc.], blocks to
> > >>>>>> the right [C on OS X], here I am, stuck in the middle with you!
--~--~---------~--~----~------------~-------~--~----~
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