{"id":238380,"date":"2022-03-28T16:42:10","date_gmt":"2022-03-28T15:42:10","guid":{"rendered":"https:\/\/blog.jetbrains.com\/idea\/2022\/03\/java-18-features-support\/"},"modified":"2025-09-18T14:52:21","modified_gmt":"2025-09-18T13:52:21","slug":"fonctionnalites-de-java-18-dans-intellij-idea","status":"publish","type":"idea","link":"https:\/\/blog.jetbrains.com\/fr\/idea\/2022\/03\/fonctionnalites-de-java-18-dans-intellij-idea\/","title":{"rendered":"Prise en charge des fonctionnalit\u00e9s de Java 18 dans IntelliJ IDEA"},"content":{"rendered":"\n<p>Java 18 est disponible depuis fin mars et IntelliJ IDEA prendra en charge ses nouvelles fonctionnalit\u00e9s dans sa version 2022.1, qui sera publi\u00e9e tr\u00e8s prochainement.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prise en charge des extraits de code<\/h2>\n\n\n\n<p>La balise <em>@snippet<\/em> pour le doclet standard de JavaDoc <a href=\"https:\/\/openjdk.java.net\/jeps\/413\" target=\"_blank\" rel=\"noopener\">a \u00e9t\u00e9 introduite<\/a> dans le JDK&nbsp;18 afin de simplifier l&#8217;inclusion d&#8217;exemples de code source dans la documentation d&#8217;API.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/a04oHNjRZrReq_6CAtYC6Ytz7A8t9d64SCiRVe0hONS1E5kzmuHNqYKvgjEx8z_bKI1YVs8cxYQznh5hUbp9nz_1NrnsLPThWvQR97BbvDfLFde6VHPQxFRq8Wd9KR4gfxm_BZ9p.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>M\u00eame sans un wrapper explicite, le fragment de l&#8217;extrait est toujours reconnu comme du code Java. N&#8217;importe quel langage peut \u00eatre sp\u00e9cifi\u00e9 et les fonctionnalit\u00e9s d&#8217;<a href=\"https:\/\/www.jetbrains.com\/help\/idea\/using-language-injections.html\" target=\"_blank\" rel=\"noopener\">injection de langage<\/a> fonctionneront \u00e9galement pour les extraits. Par exemple, les r\u00e9f\u00e9rences navigables fonctionneront pour tous les \u00e9l\u00e9ments disponibles via les importations :<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/jk-rgQkMpAMJ4bjAKjxXakRIBtyenJkoreZk7XqHNN3xzib9AFgO-h8zD-a61djInEIHJFqdEf8LqpcXEPP6LGWyHkgCfShSi3Q8lM_Xu4FBv7jyDXhg0Psox3BPywryeQfnFoLF.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Il n&#8217;est pas n\u00e9cessaire d&#8217;\u00e9crire tout le code dans l&#8217;extrait avec les liaisons de la classe. Le fragment sera reconnu de la m\u00eame mani\u00e8re que les fragments JShell par IntelliJ IDEA.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mod\u00e8les pour les expressions switch : deuxi\u00e8me preview<\/h2>\n\n\n\n<p>La sp\u00e9cification pour la mise en correspondance des mod\u00e8les pour les expressions switch introduite dans le JDK17 a \u00e9t\u00e9 <a href=\"https:\/\/openjdk.java.net\/jeps\/420\" target=\"_blank\" rel=\"noopener\">mise \u00e0 jour<\/a> avec deux modifications d\u00e9j\u00e0 prises en charge dans IntelliJ IDEA&nbsp;:<\/p>\n\n\n\n<ul>\n<li>La dominance de tout type de mod\u00e8le (y compris les guarded patterns) vis-\u00e0-vis des cases constantes. Il n&#8217;y a pas de changement en ce qui concerne les mod\u00e8les et les cases non constantes.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/7l1b9P_qt5XL8XsHeJIWzwUMtVFQBIR19XN43KNVDjPmnLHHhYUzR-Bd-ZE1VU-VstmjBmuWEQTG5PSzN7EDuougWK1qVYWBmCdfH8zqIcj5Dd8o_fPBO47qF6JJYJ9J2sHll5sF.png\" alt=\"\"\/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<ul>\n<li>Pour les hi\u00e9rarchies scell\u00e9es, il arrive que les sous-types ne puissent pas \u00eatre utilis\u00e9s pour un type de s\u00e9lecteur ou convertis en types de s\u00e9lecteur. Vous n&#8217;avez plus besoin de traiter ces sous-types pour rendre les instructions switch exhaustives.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/vghJ66NaVEJK7P1hgC4-dvC0x7CJbc1syZTYHdtV01UeM-TAHWHEZkx6Eo0WDMk_Igy1625JU7GD9LFcuH-BZmkJOHwXfyky4f2LLY5qOnXKcnjp-bebtPyn6ZZPcSOnj6o0dfvq.png\" alt=\"\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Autres mises \u00e0 jour<\/h2>\n\n\n\n<p>\u00c0 partir de Java 18, les classes internes non statiques (anonymes ou non) n&#8217;incluent pas `<em>this`<\/em> si ce dernier n&#8217;est pas utilis\u00e9. L&#8217;inspection <em>Cleaner captures object reference<\/em> a \u00e9t\u00e9 mise \u00e0 jour en cons\u00e9quence. Cela ne d\u00e9clenchera pas l&#8217;avertissement suivant dans le code :<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/fzcVsW_pWZcMQx7zC9sKSqaQ5bT2JndqYaK3i9ViLj3BbyTwQFedYh330ogdP0IDF8-8GL2_C15Vc4M8mBCJvUMA7Lpn02mgzblhR_YtE4o-mbkqpBmcbrVO7aHFwUIuen4fDZ.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">The inspection: Java | Probable bugs | Cleaner captures object reference<\/figcaption><\/figure>\n\n\n\n<p>De plus, dans le JDK18, le jeu de caract\u00e8res par d\u00e9faut est d\u00e9sormais UTF-8, au lieu de diff\u00e9rents jeux de caract\u00e8res par d\u00e9faut en fonction de la plateforme. L&#8217;inspection <em>Implicit platform default charset<\/em>, qui signale les appels de m\u00e9thode et de constructeur utilisant implicitement le jeu de caract\u00e8res par d\u00e9faut de la plateforme, a \u00e9t\u00e9 mise \u00e0 jour en cons\u00e9quence.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><em>Auteur de l&#8217;article original en anglais<\/em> :<\/p>\n\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/secure.gravatar.com\/avatar\/?s=200&#038;r=g\" width=\"200\" height=\"200\" alt=\"\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":813,"featured_media":0,"comment_status":"closed","ping_status":"closed","template":"","categories":[4759,5088],"tags":[6916,155,6961,76],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/idea\/238380"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/idea"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/types\/idea"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/users\/813"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/comments?post=238380"}],"version-history":[{"count":10,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/idea\/238380\/revisions"}],"predecessor-version":[{"id":633096,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/idea\/238380\/revisions\/633096"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media?parent=238380"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/categories?post=238380"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/tags?post=238380"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/cross-post-tag?post=238380"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}