<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>www.jugpadova.it: Java 7</title>
    <link>http://www.jugpadova.it/articles/2006/09/13/java-7</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>Java User Group [Padova]</description>
    <item>
      <title>Java 7</title>
      <description>&lt;p&gt;No, non avete letto male, non è ancora uscita la release ufficiale di Java 6, che già si pensa a cosa inserire in Java 7.&lt;/p&gt;


	&lt;p&gt;In questi giorni si è aperta nella blogosfera che ruota attorno a Java una piccola guerra di religione sulla necessità o meno di inserire le chiusure nel linguaggio.&lt;/p&gt;
&lt;p&gt;Per chi è avezzo di Smalltalk, Ruby o anche C# il concetto di chiusura è familiare. Per chi invece ha visto solo Java, il concetto è nuovo (o quasi).&lt;/p&gt;


	&lt;p&gt;Brevemente un &lt;a href="http://www.martinfowler.com/bliki/Closure.html"&gt;closure&lt;/a&gt;  è una funzione dichiarata all&amp;#8217;interno di un&amp;#8217;altra funzione della quale condivide le variabili. 
&lt;a href="http://gafter.blogspot.com/2006/09/closures-for-java-version-01.html"&gt;Neil Gafter&lt;/a&gt;  (già co-autore del Collection Framework) propone che questo tipo di costrutto sia inserito anche all&amp;#8217;interno di Java.&lt;/p&gt;


	&lt;p&gt;Il concetto non è completamente nuovo perché in Java esistono già dei costrutti simili, le classi interne anonime, che svolgono grossomodo lo stesso compito, con due differenze, secondo Gafter, importanti:&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;Le classi interne anonime possono lavorare con variabili del metodo che le contiene solo se queste sono dichiarate &lt;code&gt;final&lt;/code&gt;.&lt;/li&gt;
		&lt;li&gt;La sintassi che si ottiene con le chiusure è più semplice e pulita.&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;Vediamo un piccolo esempio del secondo punto. Supponiamo di avere un metodo che ha il compito di sottomettere un task ad un altro thread (usando &lt;code&gt;java.util.concurrent.Executor&lt;/code&gt;).&lt;/p&gt;


	&lt;p&gt;Con le classi anonime scriveremmo il seguente codice:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;void sayHelloInAnotherThread(Executor ex) {
    ex.execute(new Runnable() {
        public void run() {
            System.out.println(&amp;quot;hello&amp;quot;);
        }
    });
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;mentre con le chiusure potremmo scrivere (la sintassi è ancora oggetto di discussione):&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;void sayHelloInAnotherThread(Executor ex) {
    ex.execute(() {
        System.out.println(&amp;quot;hello&amp;quot;);
    });
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;La questione è aperta. Anche &lt;a href="http://blogs.sun.com/jag/entry/the_black_hole_theory_of"&gt;James Gosling&lt;/a&gt; ha espresso dubbi circa la vera utilità di tale feature.&lt;/p&gt;


	&lt;p&gt;Staremo a vedere.&lt;/p&gt;</description>
      <pubDate>Wed, 13 Sep 2006 12:55:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:9342b67a-9682-4e38-a335-46399c98e2e9</guid>
      <author>Andrea Nasato</author>
      <link>http://www.jugpadova.it/articles/2006/09/13/java-7</link>
      <category>Programmazione</category>
      <category>java</category>
      <category>closures</category>
      <category>Gosling</category>
      <trackback:ping>http://www.jugpadova.it/articles/trackback/4295</trackback:ping>
    </item>
    <item>
      <title>"Java 7" by Michele</title>
      <description>&lt;p&gt;Il problema più grosso delle closure in java è che saranno &amp;#8216;ingessate&amp;#8217; dentro la sintassi del linguaggio.. nonostante questo, a mio avviso saranno una di quelle feature che, una volta usate, non abbandoni più ;-)&lt;/p&gt;</description>
      <pubDate>Sat, 16 Sep 2006 17:40:43 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:e594ab7a-dfd5-4b71-9856-913bfcb513a7</guid>
      <link>http://www.jugpadova.it/articles/2006/09/13/java-7#comment-4352</link>
    </item>
  </channel>
</rss>
