{"id":13289,"date":"2017-10-23T17:39:47","date_gmt":"2017-10-23T15:39:47","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=13289"},"modified":"2017-10-23T17:39:47","modified_gmt":"2017-10-23T15:39:47","slug":"java9-le-novita","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/java9-le-novita\/","title":{"rendered":"Java9: le novit\u00e0"},"content":{"rendered":"<p>Lo scorso 21 settembre \u00e8 stato pubblicato <a href=\"http:\/\/www.oracle.com\/technetwork\/java\/javase\/downloads\/index.html\" target=\"_blank\" rel=\"noopener\">Java 9<\/a>, a tre anni di distanza dalla rivoluzionaria versione 8. Anche in questa edizione sono state <strong>molte le novit\u00e0<\/strong>, alcune di rilevanza maggiore, altre consistenti per lo pi\u00f9 in semplici modifiche al linguaggio: ne vediamo qui le principali, soprattutto quelle che influiscono maggiormente nella vita dello sviluppatore.<\/p>\n<p>Tra le novit\u00e0 pi\u00f9 importanti, si annovera senz&#8217;altro il <strong>sistema modulare<\/strong>. Sinora la maggiore struttura per raccogliere classi era il <em>package<\/em> utile sia per pianificare internamente i nostri progetti sia per suddividere la piattaforma Java in sezioni dedicate ognuna ad uno scopo (java.io per l&#8217;input\/output, java.util per strutture dati e altro, etc.). <strong>I moduli nascono come una struttura di livello superiore ai package<\/strong> per fornire una nuova organizzazione interna ad applicazioni complesse ed una suddivisione pi\u00f9 articolata del JDK stesso. Con i moduli si potr\u00e0 specificare in ogni pubblicazione dell&#8217;applicazione quali componenti devono esser incluse per un <em>build<\/em> mirato: sia nella realizzazione di applicazioni web sia per la programmazione embedded di dispositivi con risorse limitate.<\/p>\n<p>Un&#8217;altra novit\u00e0 molto interessante \u00e8 la disponibilit\u00e0 ora di un <strong>ambiente REPL<\/strong> (<strong>R<\/strong>ead-<strong>E<\/strong>val-<strong>P<\/strong>rint-<strong>L<\/strong>oop), una console interattiva in cui si pu\u00f2 direttamente inserire un comando Java e farlo eseguire. Risponde al comando <em>jshell<\/em> gi\u00e0 disponibile nella cartella <em>bin<\/em> del JDK ed \u00e8 una caratteristica richiesta da anni dagli sviluppatori. Tra l&#8217;altro, \u00e8 stato fatto notare, non di rado, che l&#8217;assenza di una console virtuale potesse limitare l&#8217;adozione di Java in contesti formativi e scolastici che sarebbero stati molto avvantaggiati da un ambiente per la prova immediata delle nozioni acquisite con il conseguente avvicinamento a tecnologie in cui una REPL \u00e8 sempre esistita, pensiamo a Python.<\/p>\n<p>Sul fronte delle <strong>tecnologie di Rete e comunicazione<\/strong>, si registrano diverse novit\u00e0 come:<\/p>\n<ul>\n<li>avvicinamento ai maggiori standard della rete con l&#8217;aggiornamento dei client HTTP per ospitare integrazioni con\u00a0<a href=\"http:\/\/www.devapp.it\/wordpress\/http2-come-sara-il-web-del-futuro\/\" target=\"_blank\" rel=\"noopener\">protocollo HTTP\/2<\/a>\u00a0e WebSocket e avanzamento del tool Javadoc che ora produce documentazione in markup HTML5;<\/li>\n<li>introduzione delle API per il protocollo DTLS (Data Transport Layer Security) nato per scambiare in sicurezza messaggi proteggendoli da contraffazioni ed intercettazioni;<\/li>\n<li>supporto per la codifica dei caratteri Unicode 8.0;<\/li>\n<li>classificazione <em>deprecated<\/em> per le Applet API, gi\u00e0 cadute in disuso da molti anni.<\/li>\n<\/ul>\n<p>Ancora miglioramenti sono stati apportati alle capacit\u00e0 di <strong>integrazione di Javascript<\/strong> in applicazioni Java. Il progetto Nashorn che si occupa di tale materia \u00e8 gi\u00e0 stato un&#8217;interessante integrazione di Java8 e nella versione 9 del linguaggio si \u00e8 registrata l&#8217;apparizione di nuove <em>parser API<\/em> per permettere ad IDE ed ambienti esterni di analizzare ed interpretare codice ECMAScript (per interderci, la versione moderna del Javascript) nonch\u00e9 il supporto ad alcune caratteristiche di ECMAScript6 come il ciclo <em>for&#8230;of<\/em>, le parole chiave <em>let<\/em> o <em>const<\/em>, le strutture dati Map e Set ed altro ancora.<\/p>\n<p>Inoltre, con Java9 si \u00e8 avuta una serie di novit\u00e0 nel linguaggio, in settori diversi ma comunque finalizzati a raggiungere una<strong> maggiore sinteticit\u00e0 del codice<\/strong>, missione gi\u00e0 intrapresa con Java8. Eccone alcune:<\/p>\n<ul>\n<li>le interfacce (costrutto gi\u00e0 ampiamente modernizzato da Java8) ora possono ospitare metodi statici private;<\/li>\n<li>l&#8217;operatore <em>diamond<\/em> (le parentesi acute vuote &lt;&gt; tipiche dei Generics) pu\u00f2 essere usato contestualmente alla creazione di un oggetto anonimo;<\/li>\n<li>il costrutto<em> try-with-resources<\/em> pu\u00f2 gestire oggetti creati in precedenza senza doverne creare uno nuovo;<\/li>\n<li>le interfacce <em>Set<\/em>, <em>List<\/em> e <em>Map<\/em>, dedicate alla gestione di strutture dati, acquisiscono il nuovo metodo factory <em>of<\/em> che permette di creare in maniera agevole degli oggetti immutabili;<\/li>\n<li>metodo <em>stream()<\/em> per lavorare con gli Streams sugli elementi Optional.<\/li>\n<\/ul>\n<p>Insomma, in Java9 di cose interessanti ce ne sono molte. Questa era una rapida carrellata ma non mancheremo di fornire maggiori informazioni con tutorial specifici.<\/p>\n<p>Alla prossima!<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lo scorso 21 settembre \u00e8 stato pubblicato Java 9, a tre anni di distanza dalla rivoluzionaria versione&#8230;<\/p>\n","protected":false},"author":561,"featured_media":13300,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[534],"tags":[1526,1966,2027,2026],"class_list":["post-13289","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news","tag-java","tag-java-virtual-machine","tag-java9","tag-jdk"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/13289","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/561"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=13289"}],"version-history":[{"count":4,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/13289\/revisions"}],"predecessor-version":[{"id":13297,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/13289\/revisions\/13297"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media\/13300"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=13289"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=13289"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=13289"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}