{"id":947,"date":"2019-08-13T12:10:33","date_gmt":"2019-08-13T10:10:33","guid":{"rendered":"http:\/\/www.loicmathieu.fr\/wordpress\/?p=947"},"modified":"2020-05-06T09:53:37","modified_gmt":"2020-05-06T07:53:37","slug":"java-13-quoi-de-neuf","status":"publish","type":"post","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-13-quoi-de-neuf\/","title":{"rendered":"Java 13 : quoi de neuf ?"},"content":{"rendered":"<p>Maintenant que Java 13 est features complete (Release Candidate au jour d\u2019\u00e9criture de l\u2019article), c\u2019est le moment de faire le tour des fonctionnalit\u00e9s qu\u2019apporte cette nouvelle version, \u00e0 nous, les d\u00e9veloppeurs.<\/p>\n<p>Cet article fait partie d\u2019une suite d\u2019article sur les nouveaut\u00e9s des derni\u00e8res version de Java, pour ceux qui voudraient les lires en voici les liens : <a href=\"http:\/\/www.loicmathieu.fr\/wordpress\/informatique\/java-12-quoi-de-neuf\/\">Java 12<\/a>, <a href=\"http:\/\/www.loicmathieu.fr\/wordpress\/informatique\/java-11-quoi-de-neuf\/\">Java 11<\/a>,\u00a0<a href=\"http:\/\/www.loicmathieu.fr\/wordpress\/informatique\/java-10-quoi-de-neuf\/\">Java 10,<\/a>\u00a0et\u00a0<a href=\"http:\/\/www.loicmathieu.fr\/wordpress\/informatique\/les-nouveautes-de-java-9-pour-les-developeurs\/\">Java 9<\/a>.<\/p>\n<p>Et encore une fois, force est de constater qu&rsquo;il n&rsquo;y a vraiment pas beaucoup de nouveaut\u00e9 dans cette release. A part les nouveaux Text Block qui font suite aux Raw Strings, il y a tr\u00e8s peu de modification dans le JDK.<\/p>\n<h2>JEP-355: Text Blocks (Preview)<\/h2>\n<p>C&rsquo;est la grande nouveaut\u00e9 de la version 13 de Java, la possibilit\u00e9 d&rsquo;\u00e9crire des <strong>Text Blocks<\/strong> : un nouveau type de String Literal qui permet de les \u00e9crire sur plusieurs lignes.<\/p>\n<p>Les Text Blocks n&rsquo;apportent pas \u00e9norm\u00e9ment de nouvelles fonctionnalit\u00e9s (ce ne sont pas des raw string, il n&rsquo;y a pas d&rsquo;interpolation de cha\u00eene ou autre), ils permettent juste d&rsquo;\u00e9crire des strings sur plusieurs lignes, et g\u00e8rent automatiquement l&rsquo;indentation pour nous. Au lieu d&rsquo;utiliser un seul caract\u00e8re d\u2019\u00e9chappement ils en utilisent une s\u00e9quence : <code>&quot;&quot;&quot;<\/code><\/p>\n<pre>System.out.println(\"\"\"\n\u00a0\u00a0\u00a0\u00a0Hello,\n\u00a0\u00a0\u00a0\u00a0multiline\n\u00a0\u00a0\u00a0\u00a0text blocks!\"\"\")\n<\/pre>\n<p>En parlant d&rsquo;indentation, c&rsquo;est bien ce qui est le plus sp\u00e9cifique dans cette nouvelle fonctionnalit\u00e9 ; un algorithme un peu complexe a \u00e9t\u00e9 impl\u00e9ment\u00e9 pour conserver l&rsquo;indentation <em>telle que le d\u00e9veloppeur\u00a0avait l&rsquo;intention de la d\u00e9finir.\u00a0<\/em>Concr\u00e8tement, l&rsquo;indentation est faite en supprimant l&rsquo;indentation avant la premi\u00e8re lettre (donc ici on supprime l&rsquo;indentation avant le H de Hello), c&rsquo;est ce qu&rsquo;on appelle l&rsquo;indentation accidentelle.<\/p>\n<p>Les r\u00e8gles principales des Text Blocks sont:<\/p>\n<ul><li>Commence pas <code>&quot;&quot;&quot;<\/code> et un retour \u00e0 la ligne.<\/li>\n\n<li>Suppression de l&rsquo;indentation accidentelle et du premier retour \u00e0 la ligne.<\/li>\n\n<li>Conservation du reste de l&rsquo;indentation.<\/li>\n\n<li>Termine par <code>&quot;&quot;&quot;<\/code> sans retour \u00e0 la ligne pr\u00e9alable. S&rsquo;il y en a un il sera ajout\u00e9 \u00e0 la fin de la string !<\/li>\n\n<li>S&rsquo;il y a un retour \u00e0 la ligne en fin de Text Block, sa position d\u00e9finira l&rsquo;indentation accidentelle \u00e0 la place de la premi\u00e8re lettre du Text Block.<\/li>\n\n<li>On peut utiliser une double-quote \u00e0 l\u2019int\u00e9rieur d&rsquo;un Text Block<\/li>\n<\/ul>\n<p>Pour l&rsquo;impl\u00e9mentation des Text Blocks, des nouvelles m\u00e9thodes ont \u00e9t\u00e9 ajout\u00e9es \u00e0 la classe String. Mais comme la fonctionnalit\u00e9 est une preview feature, il faut l&rsquo;activer via <code>--enable-preview<\/code> pour pouvoir les utiliser : JDK-8203444 &#8211; String::formatted, JDK-8223775 &#8211; String::stripIndent et JDK-8223781 &#8211; String::translateEscapes.<\/p>\n<p>Plus d&rsquo;info : <a href=\"https:\/\/openjdk.java.net\/jeps\/355\"><a href=\"https:\/\/openjdk.java.net\/jeps\/355\">https:\/\/openjdk.java.net\/jeps\/355<\/a><\/a> et dans l&rsquo;article tr\u00e8s complet de Nicolai Parlog sur le sujet: <a href=\"https:\/\/blog.codefx.org\/java\/text-blocks\/\"><a href=\"https:\/\/blog.codefx.org\/java\/text-blocks\/\">https:\/\/blog.codefx.org\/java\/text-blocks\/<\/a><\/a><\/p>\n<p>Vous pouvez aussi lire le <em>Programmer&rsquo;s Guide To Text Blocks <\/em>par Jim Laskey et Stuart Marks : <a href=\"http:\/\/cr.openjdk.java.net\/~jlaskey\/Strings\/TextBlocksGuide_v8.html\"><a href=\"http:\/\/cr.openjdk.java.net\/~jlaskey\/Strings\/TextBlocksGuide_v8.html\">http:\/\/cr.openjdk.java.net\/~jlaskey\/Strings\/TextBlocksGuide_v8.html<\/a><\/a><\/p>\n<h2>JEP 354 &#8211; Switch Expressions (Preview)<\/h2>\n<p>H\u00e9las, les Switch Expressions restent en preview! Une petite modification \u00e0 leur impl\u00e9mentation, un nouveau mot cl\u00e9 <code>yield<\/code> a \u00e9t\u00e9 ajout\u00e9 pour\u00a0<em>retourner<\/em> l&rsquo;\u00e9l\u00e9ment depuis une branche du switch. Auparavant on utilisait <code>break &quot;value&quot;<\/code> maintenant on doit utiliser <code>yield &quot;value&quot;;<\/code>.<\/p>\n<p>L&rsquo;id\u00e9e \u00e9tant de pouvoir r\u00e9utiliser ce nouveau mot cl\u00e9 plus tard (par exemple pour des if expression ?).<\/p>\n<p>Plus d&rsquo;info dans la JEP : <a href=\"https:\/\/openjdk.java.net\/jeps\/354\"><a href=\"https:\/\/openjdk.java.net\/jeps\/354\">https:\/\/openjdk.java.net\/jeps\/354<\/a><\/a><\/p>\n<h2>Shenandoah:<\/h2>\n<p>Beaucoup de nouveaut\u00e9s c\u00f4t\u00e9 Shenandoah, le nouveau GC impl\u00e9ment\u00e9 par Red Hat et int\u00e9gr\u00e9 \u00e0 OpenJDK.<\/p>\n<p>Les principales sont le support des JVM 32 bits et l&rsquo;\u00e9limination du\u00a0<em>forwarding pointer word <\/em>qui permet de r\u00e9duire l&#8217;empreinte m\u00e9moire de Shenandoah via l&rsquo;ajout de <em>load reference barriers.<\/em><\/p>\n<p>Plus d&rsquo;info via cette s\u00e9rie de 3 posts sur le blog de Red Hat : <a href=\"https:\/\/developers.redhat.com\/blog\/?p=602377\"><a href=\"https:\/\/developers.redhat.com\/blog\/?p=602377\">https:\/\/developers.redhat.com\/blog\/?p=602377<\/a><\/a><\/p>\n<h2>Autre<\/h2>\n<p>Via la <a href=\"https:\/\/openjdk.java.net\/jeps\/353\">JEP 353: Reimplement the Legacy Socket API<\/a>, les API <code>java.net.Socket<\/code> et <code>java.net.ServerSocket<\/code> ont \u00e9t\u00e9 totalement r\u00e9-\u00e9crite. Leur impl\u00e9mentation dataient de JDK 1.0, et les travaux en cours pour l&rsquo;impl\u00e9mentation des user-mode threads, a.k.a. fibers, dans le cadre du <a href=\"https:\/\/openjdk.java.net\/projects\/loom\"> Project Loom<\/a> n\u00e9cessitaient quelques adaptations.<\/p>\n<p>Il y a eu aussi pas mal nouveaut\u00e9 c\u00f4t\u00e9 s\u00e9curit\u00e9: <a href=\"https:\/\/seanjmullan.org\/blog\/2019\/08\/05\/jdk13\"><a href=\"https:\/\/seanjmullan.org\/blog\/2019\/08\/05\/jdk13\">https:\/\/seanjmullan.org\/blog\/2019\/08\/05\/jdk13<\/a><\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Maintenant que Java 13 est features complete (Release Candidate au jour d\u2019\u00e9criture de l\u2019article), c\u2019est le moment de faire le tour des fonctionnalit\u00e9s qu\u2019apporte cette nouvelle version, \u00e0 nous, les d\u00e9veloppeurs. Cet article fait partie d\u2019une suite d\u2019article sur les nouveaut\u00e9s des derni\u00e8res version de Java, pour ceux qui voudraient les lires en voici les liens : Java 12, Java 11,\u00a0Java 10,\u00a0et\u00a0Java 9. Et encore une fois, force est de constater qu&rsquo;il n&rsquo;y a vraiment pas beaucoup de nouveaut\u00e9 dans&#8230;<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-13-quoi-de-neuf\/\">Lire la suite<span class=\"screen-reader-text\"> Lire la suite<\/span><\/a><\/p><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[9],"tags":[11,175,163],"class_list":["post-947","post","type-post","status-publish","format-standard","hentry","category-informatique","tag-java","tag-java13","tag-whatsnew"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":722,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-10-quoi-de-neuf\/","url_meta":{"origin":947,"position":0},"title":"Java 10 : quoi de neuf ?","author":"admin","date":"lundi 26 mars 2018","format":false,"excerpt":"Maintenant que Java 10 est sorti, il est temps de se pencher sur les nouveaut\u00e9s de cette version. Comme pour mon pr\u00e9c\u00e9dent article sur java 9, je vais me pencher principalement sur les changements qui impacterons les d\u00e9veloppeurs utilisant Java en laissant de c\u00f4t\u00e9 les changements internes\/anecdotique\/sur des API peu\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1112,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-15-quoi-de-neuf\/","url_meta":{"origin":947,"position":1},"title":"Java 15 : quoi de neuf ?","author":"admin","date":"jeudi  2 juillet 2020","format":false,"excerpt":"Maintenant que Java 15 est features complete (Rampdown Phase One au jour d\u2019\u00e9criture de l\u2019article), c\u2019est le moment de faire le tour des fonctionnalit\u00e9s qu\u2019apporte cette nouvelle version, \u00e0 nous, les d\u00e9veloppeurs. Cet article fait partie d\u2019une suite d\u2019article sur les nouveaut\u00e9s des derni\u00e8res versions de Java, pour ceux qui\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":652,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/les-nouveautes-de-java-9-pour-les-developeurs\/","url_meta":{"origin":947,"position":2},"title":"Les nouveaut\u00e9s de java 9 pour les d\u00e9veloppeurs","author":"admin","date":"lundi 27 mars 2017","format":false,"excerpt":"Maintenant que Java 9 est Features Complete, il est temps de se pencher sur toutes les nouveaut\u00e9s que cette nouvelle version va nous apporter, \u00e0 nous, d\u00e9velopeurs utilisant java. Bien sur, tout le monde a entendu parler de la modularisation du JDK (project Jigsaw) attendu depuis tr\u00e8s longtemps. Et bien,\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"jshell the Java REPL","src":"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/jshell.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":865,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-12-quoi-de-neuf\/","url_meta":{"origin":947,"position":3},"title":"Java 12 : quoi de neuf ?","author":"admin","date":"mercredi 23 janvier 2019","format":false,"excerpt":"Maintenant que Java 12 est features complete (Rampdown Phase 2 au jour d'\u00e9criture de l'article), c'est le moment de faire le tour des fonctionnalit\u00e9s qu'apporte cette nouvelle version, \u00e0 nous, les d\u00e9veloppeurs. Cet article fait parti d'une suite d'article sur les nouveaut\u00e9s des derni\u00e8res version de Java, pour ceux qui\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1375,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-18-quoi-de-neuf\/","url_meta":{"origin":947,"position":4},"title":"Java 18 : quoi de neuf ?","author":"admin","date":"mardi  4 janvier 2022","format":false,"excerpt":"Maintenant que Java 18 est features complete (Rampdown Phase One au jour d\u2019\u00e9criture de l\u2019article), c\u2019est le moment de faire le tour des fonctionnalit\u00e9s qu\u2019apporte cette nouvelle version, \u00e0 nous, les d\u00e9veloppeurs. Cet article fait partie d\u2019une suite d\u2019article sur les nouveaut\u00e9s des derni\u00e8res versions de Java, pour ceux qui\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1684,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-21-quoi-de-neuf\/","url_meta":{"origin":947,"position":5},"title":"Java 21 : quoi de neuf ?","author":"admin","date":"mardi  8 ao\u00fbt 2023","format":false,"excerpt":"Maintenant que Java 21 est features complete (Rampdown Phase Two au jour d\u2019\u00e9criture de l\u2019article), c\u2019est le moment de faire le tour des fonctionnalit\u00e9s qu\u2019apporte cette nouvelle version, \u00e0 nous, les d\u00e9veloppeurs. Cet article fait partie d\u2019une suite d\u2019article sur les nouveaut\u00e9s des derni\u00e8res versions de Java, pour ceux qui\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"Java Collection API hierarchy","src":"https:\/\/i0.wp.com\/cr.openjdk.org\/~smarks\/collections\/SequencedCollectionDiagram20220216.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/cr.openjdk.org\/~smarks\/collections\/SequencedCollectionDiagram20220216.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/cr.openjdk.org\/~smarks\/collections\/SequencedCollectionDiagram20220216.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/cr.openjdk.org\/~smarks\/collections\/SequencedCollectionDiagram20220216.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/cr.openjdk.org\/~smarks\/collections\/SequencedCollectionDiagram20220216.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/cr.openjdk.org\/~smarks\/collections\/SequencedCollectionDiagram20220216.png?resize=1400%2C800&ssl=1 4x"},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/947","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/comments?post=947"}],"version-history":[{"count":0,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/947\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/media?parent=947"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/categories?post=947"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/tags?post=947"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}