{"id":1284,"date":"2021-08-05T14:02:32","date_gmt":"2021-08-05T12:02:32","guid":{"rendered":"https:\/\/www.loicmathieu.fr\/wordpress\/?p=1284"},"modified":"2021-09-14T19:59:53","modified_gmt":"2021-09-14T17:59:53","slug":"java-17-quoi-de-neuf","status":"publish","type":"post","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-17-quoi-de-neuf\/","title":{"rendered":"Java 17 : quoi de neuf ?"},"content":{"rendered":"<p>Maintenant que Java 17 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.<\/p>\n<p>Cet article fait partie d\u2019une suite d\u2019article sur les <a href=\"https:\/\/www.loicmathieu.fr\/wordpress\/tag\/whatsnew\/\">nouveaut\u00e9s des derni\u00e8res versions de Java<\/a>, pour ceux qui voudraient les lire en voici les liens : <a href=\"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/java-16-quoi-de-neuf\/\">Java 16<\/a>, <a href=\"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/java-15-quoi-de-neuf\/\">Java 15<\/a>, <a href=\"http:\/\/www.loicmathieu.fr\/wordpress\/informatique\/java-14-quoi-de-neuf\/\">Java 14<\/a>, <a href=\"http:\/\/www.loicmathieu.fr\/wordpress\/informatique\/java-13-quoi-de-neuf\/\">Java 13<\/a>, <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>Cette release ne contient pas beaucoup de JEP, et donc pas beaucoup de nouveaut\u00e9s importantes. Par contre, elle apporte quelques petites additions sympathiques, et son statut de LTS (Long Term Support) en fait une release importante.<\/p>\n<h2>JEP 406: Pattern Matching for switch (Preview)<\/h2>\n<p>C&rsquo;est sans doute la plus grande nouveaut\u00e9 de cette release, le pattern matching arrive dans les switchs, en preview. On peut d\u00e9sormais faire un switch sur le type d&rsquo;une variable (y compris enum, record et tableau), et en extraire une variable locale au case qui sera du type correspondant.<\/p>\n<p>La JEP donne l&rsquo;exemple suivant avec une cha\u00eene de if\/else :<\/p>\n<pre>\nstatic String formatter(Object o) {\n    String formatted = \"unknown\";\n    if (o instanceof Integer i) {\n        formatted = String.format(\"int %d\", i);\n    } else if (o instanceof Long l) {\n        formatted = String.format(\"long %d\", l);\n    } else if (o instanceof Double d) {\n        formatted = String.format(\"double %f\", d);\n    } else if (o instanceof String s) {\n        formatted = String.format(\"String %s\", s);\n    }\n    return formatted;\n}\n<\/pre>\n<p>Qui peut maintenant \u00eatre r\u00e9-\u00e9crit avec une switch expression :<\/p>\n<pre>\nstatic String formatterPatternSwitch(Object o) {\n    return switch (o) {\n        case Integer i -&gt; String.format(\"int %d\", i);\n        case Long l    -&gt; String.format(\"long %d\", l);\n        case Double d  -&gt; String.format(\"double %f\", d);\n        case String s  -&gt; String.format(\"String %s\", s);\n        default        -&gt; o.toString();\n    };\n}\n<\/pre>\n<p>En plus de supporter du pattern matching, le switch permet maintenant de d\u00e9finir un case sp\u00e9cial <code>null<\/code> (dans ses deux formes : statement ou expression). Auparavant, une variable de switch nulle entra\u00eenait une <code>NullPointerException<\/code>. Dans sa nouvelle forme, on peut ajouter un case <code>null<\/code> pour g\u00e9rer les nulls au sein du switch. Sans <code>case null<\/code>, l&rsquo;ancien comportement est gard\u00e9, et une <code>NullPointerException<\/code> sera lev\u00e9e.<\/p>\n<p>Si on reprend l&rsquo;exemple pr\u00e9c\u00e9dent, cela nous donne :<\/p>\n<pre>\nstatic String formatterPatternSwitch(Object o) {\n    return switch (o) {\n        case null -&gt; \"null\";\n        case Integer i -&gt; String.format(\"int %d\", i);\n        case Long l    -&gt; String.format(\"long %d\", l);\n        case Double d  -&gt; String.format(\"double %f\", d);\n        case String s  -&gt; String.format(\"String %s\", s);\n        default        -&gt; o.toString();\n    };\n}\n<\/pre>\n<p>Le grand int\u00e9r\u00eat est que cela \u00e9vite de devoir faire un test d\u00e9fensif avant le switch, et permet d&rsquo;inclure dans celui-ci la valeur nulle comme toute autre valeur possible de notre variable.<\/p>\n<p>Et \u00e7a ne s&rsquo;arr\u00eate pas l\u00e0, le switch a \u00e9t\u00e9 enrichi de <em>guards<\/em> qui permettent d&rsquo;inclure une condition au <code>case<\/code>. L&rsquo;exemple suivant issu de la JEP montre son utilisation. En ajoutant un guard au case Triangle : <code>case Triangle t &amp;&amp; (t.calculateArea() &gt; 100)<\/code>, on peut cr\u00e9er deux cases : un pour les grands triangles, et un autre pour les petits.<\/p>\n<pre>\nstatic void testTriangle(Shape s) {\n    switch (s) {\n        case Triangle t &amp;&amp; (t.calculateArea() &gt; 100) -&gt; System.out.println(\"Large triangle\");\n        case Triangle t -&gt; System.out.println(\"Small triangle\");\n        default -&gt; System.out.println(\"Non-triangle\");\n    }\n}\n<\/pre>\n<p>Plus d&rsquo;informations dans la <a href=\"https:\/\/openjdk.java.net\/jeps\/406\" rel=\"noopener\" target=\"_blank\">JEP-406<\/a>.<\/p>\n<h2>JEP 356: Enhanced Pseudo-Random Number Generators<\/h2>\n<p>La JEP-356 fournit une nouvelle interface <code>RandomGenerator<\/code>, et une factory <code>RandomGeneratorFactory<\/code>, qui permettent d&rsquo;acc\u00e9der \u00e0 une impl\u00e9mentation de g\u00e9n\u00e9rateur de nombre al\u00e9atoire. Les g\u00e9n\u00e9rateurs existant : <code>Random<\/code>, <code>SecureRandom<\/code>, <code>SplittableRandom<\/code> et <code>ThreadLocalRandom<\/code>; impl\u00e9mentent maintenant cette interface qui ajoute, entre autre, l&rsquo;acc\u00e8s \u00e0 un stream de nombre al\u00e9atoire (<code>RandomGenerator::doubles()<\/code>, R<code>andomGenerator::ints()<\/code>, &#8230;).<\/p>\n<p>De nouveaux algorithmes de g\u00e9n\u00e9ration de nombre al\u00e9atoires ont \u00e9t\u00e9 impl\u00e9ment\u00e9s, plus s\u00e9curis\u00e9s et plus performant (mais ils ne sont plus thread-safe), ils ont vocation \u00e0 remplacer les anciens.<\/p>\n<p>Voici quelques exemples d&rsquo;instanciation de g\u00e9n\u00e9rateur de nombres al\u00e9atoires :<\/p>\n<pre>\n\/\/ the old Random generator\nRandomGenerator rng1 = RandomGeneratorFactory.of(\"Random\").create(42);\n\/\/ the default random generator, currently jdk.random.L32X64MixRandom but this can change\nRandomGenerator rng2 = RandomGeneratorFactory.getDefault().create(42);\n\/\/ shortcut for the default\nRandomGenerator rng3 = RandomGenerator.getDefault(); \n\/\/ stream all available generators and display their names\nRandomGeneratorFactory.all().forEach(generator -&gt; System.out.println(generator.name());\n<\/pre>\n<p>Plus d&rsquo;informations dans la <a href=\"https:\/\/openjdk.java.net\/jeps\/356\" rel=\"noopener\" target=\"_blank\">JEP-356<\/a> ou dans cet article tr\u00e8s complet de\nMichael Bien : <a href=\"https:\/\/mbien.dev\/blog\/entry\/enhanced-pseudo-random-number-generators\" rel=\"noopener\" target=\"_blank\">Java 17&rsquo;s Enhanced Pseudo-Random Number Generators<\/a>.<\/p>\n<h2>Les fonctionnalit\u00e9s qui passent de preview \u00e0 standard<\/h2>\n<p>Dans Java 17, une seule fonctionnalit\u00e9 passe de preview \u00e0 standard : les Sealed Classes (<a href=\"https:\/\/openjdk.java.net\/jeps\/409\" rel=\"noopener\" target=\"_blank\">JEP-409<\/a>), vous pouvez vous r\u00e9f\u00e9rez \u00e0 mes articles pr\u00e9c\u00e9dents pour plus d&rsquo;informations.<\/p>\n<h2>Les fonctionnalit\u00e9s qui restent en preview<\/h2>\n<p>Les fonctionnalit\u00e9s suivantes restent en preview (ou en incubator module).<\/p>\n<p>Pour les d\u00e9tails sur celles-ci, vous pouvez vous r\u00e9f\u00e9rer \u00e0 mes articles pr\u00e9c\u00e9dents.<\/p>\n<ul><li><a href=\"https:\/\/openjdk.java.net\/jeps\/414\" rel=\"noopener\" target=\"_blank\">JEP-414<\/a> &#8211; Vector API : seconde incubation de la fonctionnalit\u00e9 qui int\u00e8gre des am\u00e9liorations au sein de l&rsquo;API et une meilleur performance.<\/li>\n\n<li><a href=\"https:\/\/openjdk.java.net\/jeps\/412\" rel=\"noopener\" target=\"_blank\">JEP-412<\/a> &#8211; Foreign Function &amp; Memory API : nouvel incubator pour ces deux fonctionnalit\u00e9s qui sont maintenant li\u00e9es (l&rsquo;une utilisant l&rsquo;autre) au sein d&rsquo;un m\u00eame incubator.<\/li>\n<\/ul>\n<h2>Un nouveau port de la JVM<\/h2>\n<p>Java 17 ajoute le support de l&rsquo;architecture macOS\/AArch64 (aka Apple Silicon M1). Plus d&rsquo;informations \u00e0 ce sujet dans la <a href=\"https:\/\/openjdk.java.net\/jeps\/391\" rel=\"noopener\" target=\"_blank\">JEP-391<\/a>.<\/p>\n<h2>HexFormat<\/h2>\n<p>La class <code>java.util.HexFormat<\/code> permet la conversion de type primitif, tableau de byte, ou tableau de char en cha\u00eene de caract\u00e8re hexad\u00e9cimal et vice versa.<\/p>\n<pre>\nHexFormat.of().toHexDigits(127); \/\/ \"7f\"\nHexFormat.of().fromHexDigits(\"7f\"); \/\/ 127\n<\/pre>\n<p>Plus d&rsquo;information dans le ticket <a href=\"https:\/\/bugs.openjdk.java.net\/browse\/JDK-8251989\" rel=\"noopener\" target=\"_blank\">JDK-8251989<\/a>.<\/p>\n<h2>InstantSource<\/h2>\n<p>Tester du code contenant de la manipulation de date a toujours \u00e9t\u00e9 un challenge, surtout si celui-ci use et abuse de <code>System.currentTimeMillis()<\/code>, <code>LocalDateTime.now()<\/code>, et autre initialisation de date avec la date en cours.<\/p>\n<p>Pour faciliter la testabilit\u00e9 de ce genre de code, une nouvelle interface a \u00e9t\u00e9 ajout\u00e9e au JDK : <code>InstantSource<\/code>, avec une seule impl\u00e9mentation :  <code>Clock<\/code>. Le but de l&rsquo;interface <code>InstantSource<\/code> est d&rsquo;\u00eatre une fabrique d&rsquo;<code>Instant<\/code>. Au lieu de cr\u00e9er un <code>Instant<\/code> avec la date du jour, vous le cr\u00e9ez depuis l&rsquo;<code>InstantSource<\/code>. Un test pouvant alors utiliser une <code>InstantSource<\/code> \u00e0 une date fixe au lieu de la date du jour.<\/p>\n<p>Imaginez le code suivant :<\/p>\n<pre>\n  public class MyBean {\n    private InstantSource source;  \/\/ dependency inject\n    ...\n    public void process(Instant endInstant) {\n      if (source.instant().isAfter(endInstant) {\n        ...\n      }\n    }\n  }\n<\/pre>\n<p>En fonctionnement normal, l&rsquo;<code>InstanSource<\/code> est initialis\u00e9 via <code>InstantSource.system()<\/code>, et en test via <code>InstantSource.fixed(LocaDateTime.of(\/\/the hardcoded date time))<\/code>.<\/p>\n<h2>Divers<\/h2>\n<p>Divers ajouts au JDK :<\/p>\n<ul><li><code>Map.Entry.copyOf(Map.Entry)<\/code> : permet de cr\u00e9er une copie d&rsquo;une entr\u00e9e de Map qui ne soit pas connect\u00e9e \u00e0 la Map existante.<\/li>\n\n<li><code>Process.inputReader(), Process.outputWritter(), Process.errorReader()<\/code> : permet d&rsquo;acc\u00e9der aux entr\u00e9e, sortie standard, et sortie erreur d&rsquo;un process via un Reader ou un Writter.<\/li>\n<\/ul>\n<h2>D\u00e9pr\u00e9ciation et encapsulation<\/h2>\n<p>Java 17 voit la d\u00e9pr\u00e9ciation pour suppression de l&rsquo;API des Applets via la <a href=\"https:\/\/openjdk.java.net\/jeps\/398\" rel=\"noopener\" target=\"_blank\">JEP-398<\/a>, celle-ci n&rsquo;\u00e9tant plus utilis\u00e9e depuis de nombreuses ann\u00e9es, elle n&rsquo;a pas fait couler beaucoup d&rsquo;encre.<\/p>\n<p>Java 17 voit aussi la d\u00e9pr\u00e9ciation du Security Manager pour suppression via la <a href=\"https:\/\/openjdk.java.net\/jeps\/411\" rel=\"noopener\" target=\"_blank\">JEP-411<\/a>. Il y a eu beaucoup de d\u00e9bat autour de cette annonce, avec, il faut l&rsquo;avouer un peu de <i>drama<\/i>, comme quand Apache Netbeans a annonc\u00e9 qu&rsquo;il ne pourrait pas supporter Java 17 alors qu&rsquo;il fallait juste changer quelques lignes de code &#8230; <br \/>\nLa suppression du Security Manager a \u00e9t\u00e9 annonc\u00e9e, car celui-ci est complexe \u00e0 maintenir, co\u00fbteux en termes de performance, et n&rsquo;apporte pas la s\u00e9curit\u00e9 n\u00e9cessaire face aux enjeux actuels. Il a \u00e9t\u00e9 cr\u00e9\u00e9 pour s\u00e9curiser les applets qui, par d\u00e9finition, ex\u00e9cutent du code <i>untrusted<\/i>, et n&rsquo;a donc plus de sens dans une JVM qui ne contiendrait plus l&rsquo;API Applet.\nPour plus d&rsquo;info sur sa suppression, vous pouvez lire l&rsquo;article d&rsquo;<a href=\"https:\/\/www.infoq.com\/news\/2021\/04\/java-security-vote\/\" rel=\"noopener\" target=\"_blank\">InfoQ<\/a> ou ce <a href=\"https:\/\/www.reddit.com\/r\/java\/comments\/mrkf2i\/jep_411_deprecate_the_security_manager_for_removal\/\" rel=\"noopener\" target=\"_blank\">thread reddit<\/a> (j&rsquo;ai beaucoup appr\u00e9ci\u00e9 les r\u00e9ponses de pron98).<\/p>\n<p>Pour finir, la <a href=\"https:\/\/openjdk.java.net\/jeps\/403\" rel=\"noopener\" target=\"_blank\">JEP 403: Strongly Encapsulate JDK Internals<\/a> a bascul\u00e9 le JDK vers une encapsulation stricte de ses classes internes. C&rsquo;est la fin de ce qui avait \u00e9t\u00e9 commenc\u00e9 avec Java 9 et la modularisation du JDK.\nConcr\u00e8tement, le mode d&rsquo;encapsulation \u00e9tait pass\u00e9 de <code>--illegal-access=permit<\/code> en Java 15 \u00e0 <code>--illegal-access=deny<\/code> en Java 16 avec la possibilit\u00e9 de changer l&rsquo;option de configuration. Avec Java 17, <code>--illegal-access<\/code> dispara\u00eet et l&rsquo;acc\u00e8s aux classes internes du JDK (hors Unsafe) n&rsquo;est plus possible.<\/p>","protected":false},"excerpt":{"rendered":"<p>Maintenant que Java 17 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 voudraient les lire en voici les liens : Java 16, Java 15, Java 14, Java 13, Java 12, Java 11,\u00a0Java 10,\u00a0et\u00a0Java 9. Cette release ne contient pas beaucoup de JEP,&#8230;<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-17-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,193,163],"class_list":["post-1284","post","type-post","status-publish","format-standard","hentry","category-informatique","tag-java","tag-java17","tag-whatsnew"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":856,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-next\/","url_meta":{"origin":1284,"position":0},"title":"Java.Next","author":"admin","date":"mercredi 31 octobre 2018","format":false,"excerpt":"Ma premi\u00e8re contribution au blog de Zenika est un article qui parle du futur (ou du pr\u00e9sent) de Java et des changements pour les d\u00e9veloppeurs dans les versions 9, 10 et 11. La gouvernance de Java y est aussi abord\u00e9. Cet article reprend et r\u00e9sume les articles que j'ai pr\u00e9c\u00e9demment\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":829,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-11-quoi-de-neuf\/","url_meta":{"origin":1284,"position":1},"title":"Java 11  : quoi de neuf ?","author":"admin","date":"lundi  1 octobre 2018","format":false,"excerpt":"Maintenant que Java 11 est sorti, c'est le moment de faire le tour des fonctionnalit\u00e9s qu'apporte cette 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 10,\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":712,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/demarrage-jvm-8-vs-9\/","url_meta":{"origin":1284,"position":2},"title":"D\u00e9marrage JVM 8 vs 9","author":"admin","date":"jeudi 31 ao\u00fbt 2017","format":false,"excerpt":"Introduction En parcourant la mailing liste d'open JDK (core-lib-dev) j'ai vu plusieurs threads de mail \u00e0 propos d'optimisation de temps de d\u00e9marrage et d'occupation m\u00e9moire d'une JVM \"minimale\". Ce travail a \u00e9t\u00e9 r\u00e9alis\u00e9 en grande partie par Claes Redestad (Oracle) lors du d\u00e9veloppement de Java 9. J'ai donc d\u00e9cid\u00e9 de\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":722,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-10-quoi-de-neuf\/","url_meta":{"origin":1284,"position":3},"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":1839,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-vers-une-integrite-par-defaut-de-la-jvm\/","url_meta":{"origin":1284,"position":4},"title":"Java : vers une int\u00e9grit\u00e9 par d\u00e9faut de la JVM","author":"admin","date":"mardi  4 f\u00e9vrier 2025","format":false,"excerpt":"Cet article est paru pour la premi\u00e8re fois dans le magazine Programmez! Hors s\u00e9rie #16. La Machine Virtuelle Java (JVM) est un environnement d'ex\u00e9cution qui permet \u00e0 des programmes \u00e9crits en Java (ou dans d'autres langages compil\u00e9s en bytecode Java) de s'ex\u00e9cuter sur diff\u00e9rents syst\u00e8mes d'exploitation et architectures mat\u00e9rielles. D\u00e8s\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":1284,"position":5},"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":[]}],"_links":{"self":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/1284","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=1284"}],"version-history":[{"count":0,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/1284\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/media?parent=1284"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/categories?post=1284"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/tags?post=1284"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}