{"id":10029,"date":"2021-12-21T16:02:11","date_gmt":"2021-12-21T15:02:11","guid":{"rendered":"https:\/\/vived.io\/jvm-tuesday-vol-69-co-przyniesie-java-18\/"},"modified":"2022-09-19T13:10:44","modified_gmt":"2022-09-19T11:10:44","slug":"jvm-tuesday-vol-69-co-przyniesie-java-18","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/","title":{"rendered":"JVM Tuesday vol. 69 &#8211; Co przyniesie Java 18?"},"content":{"rendered":"\n<p>JDK 18 znalaz\u0142a si\u0119 pocz\u0105tkiem grudnia w fazie \u201cRampdown\u201d. Jest to javowa nomenklatura na popularny w wielu projektach przedwdro\u017ceniowy \u201cfeature freeze\u201d &#8211; w JDK nie pojawi\u0105 si\u0119 ju\u017c \u017cadne zaskakuj\u0105ce zmiany, tw\u00f3rcy skupi\u0105 si\u0119 obecnie wy\u0142\u0105cznie na poprawie bug\u00f3w. Dla nas oznacza to za\u015b ostateczn\u0105 list\u0119 wszystkich featur\u00f3w, kt\u00f3re do JDK trafi\u0105. Dlatego te\u017c dzisiaj, troch\u0119 nietypowo, znowu edycja specjalna &#8211; kompiluj\u0105ca wszystko, co trafi do nas wraz z JDK 18.<\/p>\n\n\n\n<h2 id=\"nowe-funkcjonalnosci\" data-num=1>Nowe funkcjonalno\u015bci<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"270\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-1-1.gif\" alt=\"\" class=\"wp-image-3496\"\/><\/figure>\n\n\n\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/408\">408: Simple Web Server<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/413\">413: Code Snippets in Java API Documentation<\/a><\/p>\n\n\n\n<p>Zacznijmy od nowo\u015bci, kt\u00f3re maj\u0105 najwi\u0119ksze prawdopodobie\u0144stwo bycia u\u017cytymi przez \u201cprzemys\u0142owego\u201d programist\u0119. Je\u017celi w tej sekcji spodziewali\u015bcie si\u0119 jednak jakiego\u015b nowego syntaxu j\u0119zyka mo\u017cecie si\u0119 nieco rozczarowa\u0107. Nowo\u015bci dostarczane z now\u0105 edycj\u0105 Javy s\u0105 mocno hmmm\u2026 specjalistyczne.<\/p>\n\n\n\n<p>Specjalistyczne, bo raczej nie spodziewam si\u0119, \u017ce zapowied\u017a wbudowania w Jav\u0119 minimalistycznego Web Server wywr\u00f3ci spos\u00f3b w jaki programujemy. Narz\u0119dzie ma by\u0107 przydatne do tworzenia prototyp\u00f3w, i ad hocowego kodowania oraz testowania, zw\u0142aszcza w kontek\u015bcie edukacyjnym &#8211; i o ile rozumiem w jaki\u015b spos\u00f3b jego wprowadzenie, to naprawd\u0119 nie potrafi\u0119 si\u0119 nim jako\u015b \u201cjara\u0107\u201d.<\/p>\n\n\n\n<p>Narz\u0119dzie uruchamiane ma by\u0107 z wiersza polecenia i potrafi\u0107 serwowa\u0107 statyczne pliki w bie\u017c\u0105cym katalogu komend\u0105 <em>java -m jdk.httpserver<\/em>.<em> <\/em>Wersja CLI posiada\u0107 b\u0119dzie podstawowe opcje konfiguracyjne, jak wyb\u00f3r portu czy adresu do zbindowania. Dla tych, kt\u00f3rzy chc\u0105 troch\u0119 bardziej pokonfigurowa\u0107 swoje rozwi\u0105zanie, dost\u0119pna b\u0119dzie te\u017c mo\u017cliwo\u015b\u0107 odpalenia ca\u0142o\u015bci z poziomu kodu javowego.<\/p>\n\n\n\n<p>Druga zmiana jest ciekawsza, aczkolwiek znaj\u0105c mi\u0142o\u015b\u0107 bran\u017cy do pisania dokumentacji, ponownie dotknie tylko wybranych programist\u00f3w JEP 413 wprowadza znacznik @snippet do JavaDoc, co ma na celu upro\u015bci\u0107 do\u0142\u0105czanie przyk\u0142adowego kodu \u017ar\u00f3d\u0142owego do dokumentacji API.<\/p>\n\n\n\n<p>Do tej pory dokumentacja nie posiada\u0142a specjalnego tagu pozwalaj\u0105cego programistom przekaza\u0107 przyk\u0142adowe u\u017cycia API. Teraz to si\u0119 zmieni. Co ciekawe, tw\u00f3rcy API zapewnili u\u017cytkownikom dwa r\u00f3\u017cne warianty. Przyk\u0142ady b\u0119dzie mo\u017cna przekaza\u0107 \u201cinline\u201d:<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">\/**\n * The following code shows how to use {@code Optional.isPresent}:\n * {@snippet :\n * if (v.isPresent()) {\n *     System.out.println(&quot;v: &quot; + v.get());\n * }\n * }\n *\/<\/code><\/pre>\n\n\n\n<p>Ale r\u00f3wnie\u017c jako zewn\u0119trzny plik:<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">\/**\n * The following code shows how to use {@code Optional.isPresent}:\n * {@snippet file=&quot;ShowOptional.java&quot; region=&quot;example&quot;}\n *\/\n---------------------------\npublic class ShowOptional {\n    void show(Optional&lt;String&gt; v) {\n        \/\/ @start region=&quot;example&quot;\n        if (v.isPresent()) {\n            System.out.println(&quot;v: &quot; + v.get());\n        }\n        \/\/ @end\n    }\n}\n<\/code><\/pre>\n\n\n\n<h2 id=\"zmiany-pod-maska\" data-num=2>Zmiany pod mask\u0105<\/h2>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"394\" height=\"480\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-2-1.gif\" alt=\"\" class=\"wp-image-3497\"\/><\/figure><\/div>\n\n\n\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/416\">416: Reimplement Core Reflection with Method Handles<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/400\">400: UTF-8 by Default<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/418\">418: Internet-Address Resolution SPI<\/a><\/p>\n\n\n\n<p>Je\u017celi chodzi o dodatki z kategorii #nikogo, JEP 416 \u2013 Reimplement Core Reflection with Method Handles zdecydowanie nale\u017cy do moich ulubionych. JEP ten przynosi bowiem unifikacje sposobu, w jaki dzia\u0142a refleksja w Javie. W jego ramach dochodzi do reimplementacji <em>java.lang.reflect.Method, java.lang.reflect.Constructor<\/em>, i <em>java.lang.reflect.Field<\/em> na mechanizm invoke, wprowadzony w JDK 1.7. Jest to rodzaj sp\u0142aty d\u0142ugu technicznego przez zesp\u00f3\u0142 pracuj\u0105cy nad j\u0119zykiem i maszyn\u0105 wirtualn\u0105, jako u\u017cytkownicy nie zauwa\u017cymy wi\u0119c jakich\u015b znacz\u0105cych zmian. JEP 416 jest jednak w zasadzie niezb\u0119dny do wprowadznia zmian w architekt\u00f3rze JVMa, kt\u00f3re przyjd\u0105 wraz z projektem Loom i Valhalla.<\/p>\n\n\n\n<p>Nast\u0119pnym jest JEP o bardzo \u0142adnym, okr\u0105g\u0142ym numerze 400, kt\u00f3ry wprowadza wreszcie UTF-8 do Javy domy\u015blny spos\u00f3b kodowania znak\u00f3w. Cho\u0107 historycznie by\u0142o z tym r\u00f3\u017cnie obecnie \u017cyjemy w \u015bwiecie&nbsp; w kt\u00f3rym enkodowanie znak\u00f3w wydaje si\u0119 by\u0107 rozwi\u0105zanym problemem. Globalizacja (i po cz\u0119\u015bci te\u017c rozw\u00f3j hardware) sprawi\u0142y, \u017ce zamiast wielu lokalnych standard\u00f3w mamy obecnie jeden \u2013 Unicode Transformation Format, czyli popularny UTF, potrafi\u0105cy reprezentowa\u0107 znaki z wszystkich j\u0119zyk\u00f3w i dialekt\u00f3w, a dodatkowo wiele wi\u0119cej, jak kochane przez wszystkich emoji. W zwi\u0105zku z faktem, \u017ce wiele j\u0119zyk\u00f3w programowania postanowi\u0142o ju\u017c dawno uczyni\u0107 go rozwi\u0105zaniem domy\u015blnym, na podobny krok zdecydowa\u0142a si\u0119 r\u00f3wnie\u017c Java.&nbsp;<\/p>\n\n\n\n<p>O ile dla sta\u0142ych czytelnik\u00f3w wi\u0119kszo\u015b\u0107 z powy\u017cszych opisywanych zmian nie b\u0119dzie niczym nowym, tak jako ostatni przedstawimy Wam JEP, kt\u00f3ry umkn\u0105\u0142 naszej uwadze, a jest do\u015b\u0107 ciekawy. java.net.INetAddress to API s\u0142u\u017c\u0105ce do rozwi\u0105zywania nazwy host\u00f3w na adresy IP (i odwrotnie). Interfejs API obecnie korzysta z natywnego rozwi\u0105zywania DNS\u00f3w dostarczanego przez systemy operacyjne. Takowe w wi\u0119kszo\u015bci przypadk\u00f3w operuje na lokalnym pliku hosts i zewn\u0119trznych DNS-ach. S\u0105 to rozwi\u0105zania synchroniczne, w zwi\u0105zku z tym na potrzeby prac nad projektem Loom musza pojawi\u0107 si\u0119 w JVMie alternatywy. Dlatego te\u017c w ramach prac nad JEP-418 interfejs INetAddress ma by\u0107 oddzielony od implementacji, co umo\u017cliwi stworzenie odpowiednich alternatyw dzia\u0142aj\u0105cych w spos\u00f3b nieblokuj\u0105cy<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Lektura nadprogramowa:<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/inside.java\/2021\/10\/04\/the-default-charset-jep400\/\">Jep 400 and the default charset \u2013 Inside.java<\/a><\/li><li><a href=\"https:\/\/thedatastudio.net\/history_of_character_encoding.htm\">A Short History Of Character Encoding<\/a><\/li><\/ul>\n\n\n\n<h2 id=\"inkubator\" data-num=3>Inkubator<\/h2>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"281\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-4.gif\" alt=\"\" class=\"wp-image-3498\"\/><\/figure><\/div>\n\n\n\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/417\">417: Vector API (Third Incubator)<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/419\">419: Foreign Function &amp; Memory API (Second Incubator)<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/420\">420: Pattern Matching for switch (Second Preview)<\/a><\/p>\n\n\n\n<p>Tutaj nie b\u0119d\u0119 si\u0119 d\u0142ugo rozgadywa\u0142 &#8211; ka\u017cde z powy\u017cszych API ju\u017c cho\u0107 raz w inkubatorze by\u0142o, a zmiany w nich s\u0105 na tyle kosmetyczne, \u017ce my\u015bl\u0119 \u017ce z czystym sumieniem mog\u0119 Was odes\u0142a\u0107 do oryginalnych dokument\u00f3w.&nbsp;<\/p>\n\n\n\n<p>Powiedzmy sobie prawd\u0119 &#8211; ludzie u\u017cywaj\u0105cy funkcjonalno\u015bci w preview pewnie i tak ju\u017c dawno si\u0119 z powy\u017cszymi JEPami zapoznali. Dla reszty niech wystarczy fakt, \u017ce Vector API oraz Foreign Function &amp; Memory API przynosz\u0105 usprawnienia kompatybilno\u015bci z kodem natywnym, a Pattern Matching for switch to nic innego jak dalsze wprowadzanie kawa\u0142ek po kawa\u0142ku Pattern Matchingu do Javy.<\/p>\n\n\n\n<h2 id=\"a-co-wylatuje\" data-num=4>A co wylatuje?<\/h2>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"270\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-5.gif\" alt=\"\" class=\"wp-image-3499\"\/><\/figure><\/div>\n\n\n\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/421\">JEP 421: Deprecate Finalization for Removal<\/a><\/p>\n\n\n\n<p>To mo\u017ce tak na koniec JEP 421: Deprecate Finalization for Removal &#8211; czyli deprekacja mechanizmu finalizator\u00f3w. Dla tych, kt\u00f3rzy z finalizatorami nigdy nie mieli do czynienia, m\u00f3wimy o formie hooka\/aspektu, odpalanego bezpo\u015brednio przed zniszczeniami obiektu przez garbage collector. To, co w teorii brzmi jak do\u015b\u0107 przydatna mo\u017cliwo\u015b\u0107, w praktyce by\u0142o funkcj\u0105 mocno nieprzewidywaln\u0105 (istnia\u0142 szereg sytuacji, gdzie finalizer z r\u00f3\u017cnych powod\u00f3w nie by\u0142 odpalany) i dlatego r\u00f3wnie\u017c bardzo rzadko u\u017cywan\u0105.<\/p>\n\n\n\n<p>Dodatkowo, JDK 1.7 wprowadzi\u0142 du\u017co lepiej zaprojektowany mechanizm try-with-resources, kt\u00f3ry zast\u0105pi\u0142 finalizacje w najpopularniejszych przypadkach u\u017cycia, takich jak np. zamykanie po\u0142\u0105cze\u0144 do pliku. Dlatego pozostaje przy twierdzeniu, \u017ce dla wi\u0119kszo\u015bci ludzi usuni\u0119cie finalizator\u00f3w pozostaje ciekawostk\u0105, podobn\u0105 do sytuacji z Security Managerem. Je\u015bli jednak jeste\u015bcie ciekaw, jakie s\u0105 alternatywy &#8211; polecam oryginalny JEPem albo pi\u0119tnasty odcinek Inside Java Newscast od Oracle, kt\u00f3ry znajdziecie poni\u017cej.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Lektura nadprogramowa<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/www.youtube.com\/watch?v=eDgBnjOid-g\">What Happens to Finalization in JDK 18? &#8211; Inside Java Newscast #15<\/a><\/li><\/ul>\n\n\n\n<h2 id=\"podsumowanie\" data-num=5>Podsumowanie<\/h2>\n\n\n\n<p>Poprzednie wydanie Javy, JDK 17, by\u0142o LTSem o wyd\u0142u\u017conym przysz\u0142ym wsparciu. Dlatego te\u017c mo\u017cna si\u0119 by\u0142o spodziewa\u0107, \u017ce wszelkie zmiany podwy\u017cszonego ryzyka zostan\u0105 zostawione na kolejne w stosunku do niego wersje. JDK 18 to jednak edycja bardzo przej\u015bciowa. Nowy cykl releasowy przyni\u00f3s\u0142 jak zwykle pewne dodatki \u201cprzyrostowe\u201d, ale <strong>nie widz\u0119 dobrego powodu, \u017ceby ktokolwiek musia\u0142 natychmiast rzuca\u0107 si\u0119 i upgradowa\u0107 do \u201cosiemnastki\u201d<\/strong> &#8211; wida\u0107, \u017ce tw\u00f3rcy dopiero si\u0119 rozgrzewaj\u0105 i zbieraj\u0105 si\u0142y przed wdro\u017ceniem nadchodz\u0105cych, du\u017cych inicjatyw jak Valhalla czy Loom, kt\u00f3ry w ko\u0144cu niedawno ukaza\u0142 si\u0119 nareszcie w pierwszym oficjalnym preview.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Koniec roku si\u0119 zbli\u017ca, czas wielkich podsumowa\u0144, ale r\u00f3wnie\u017c patrzenia w przysz\u0142o\u015b\u0107. Dlatego te\u017c w ostatniej w tym roku edycji JVMowego Wtorku (tak, robimy sobie na tydzie\u0144 przerw\u0119 \u015bwi\u0105teczn\u0105 z kolejnymi edycjami) mamy dla Was przegl\u0105d nowo\u015bci, kt\u00f3re przyjd\u0105 wraz z JDK 18.<\/p>\n","protected":false},"author":10,"featured_media":7848,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[259],"tags":[],"class_list":["post-10029","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm-pl"],"acf":{"estimated_reading_time":"6","weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-1-1.gif","feature_image_visible":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>JVM Tuesday vol. 69 - Co przyniesie Java 18? - Vived<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JVM Tuesday vol. 69 - Co przyniesie Java 18? - Vived\" \/>\n<meta property=\"og:description\" content=\"Koniec roku si\u0119 zbli\u017ca, czas wielkich podsumowa\u0144, ale r\u00f3wnie\u017c patrzenia w przysz\u0142o\u015b\u0107. Dlatego te\u017c w ostatniej w tym roku edycji JVMowego Wtorku (tak, robimy sobie na tydzie\u0144 przerw\u0119 \u015bwi\u0105teczn\u0105 z kolejnymi edycjami) mamy dla Was przegl\u0105d nowo\u015bci, kt\u00f3re przyjd\u0105 wraz z JDK 18.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2021-12-21T15:02:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-19T11:10:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-1-1.gif\" \/>\n\t<meta property=\"og:image:width\" content=\"480\" \/>\n\t<meta property=\"og:image:height\" content=\"270\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/gif\" \/>\n<meta name=\"author\" content=\"Artur Skowro\u0144ski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"JVM Tuesday vol. 69 &#8211; Co przyniesie Java 18?\",\"datePublished\":\"2021-12-21T15:02:11+00:00\",\"dateModified\":\"2022-09-19T11:10:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/\"},\"wordCount\":1180,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-1-1.gif\",\"articleSection\":[\"JVM\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/\",\"url\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/\",\"name\":\"JVM Tuesday vol. 69 - Co przyniesie Java 18? - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-1-1.gif\",\"datePublished\":\"2021-12-21T15:02:11+00:00\",\"dateModified\":\"2022-09-19T11:10:44+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-1-1.gif\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-1-1.gif\",\"width\":480,\"height\":270},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JVM Tuesday vol. 69 &#8211; Co przyniesie Java 18?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/vived.io\/pl\/#website\",\"url\":\"https:\/\/vived.io\/pl\/\",\"name\":\"Vived\",\"description\":\"platform empowering IT people and technology companies to synergic growth\",\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/vived.io\/pl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/vived.io\/pl\/#organization\",\"name\":\"Vived\",\"url\":\"https:\/\/vived.io\/pl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"width\":136,\"height\":45,\"caption\":\"Vived\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\",\"name\":\"Artur Skowro\u0144ski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g\",\"caption\":\"Artur Skowro\u0144ski\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"JVM Tuesday vol. 69 - Co przyniesie Java 18? - Vived","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/","og_locale":"pl_PL","og_type":"article","og_title":"JVM Tuesday vol. 69 - Co przyniesie Java 18? - Vived","og_description":"Koniec roku si\u0119 zbli\u017ca, czas wielkich podsumowa\u0144, ale r\u00f3wnie\u017c patrzenia w przysz\u0142o\u015b\u0107. Dlatego te\u017c w ostatniej w tym roku edycji JVMowego Wtorku (tak, robimy sobie na tydzie\u0144 przerw\u0119 \u015bwi\u0105teczn\u0105 z kolejnymi edycjami) mamy dla Was przegl\u0105d nowo\u015bci, kt\u00f3re przyjd\u0105 wraz z JDK 18.","og_url":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/","og_site_name":"Vived","article_published_time":"2021-12-21T15:02:11+00:00","article_modified_time":"2022-09-19T11:10:44+00:00","og_image":[{"width":480,"height":270,"url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-1-1.gif","type":"image\/gif"}],"author":"Artur Skowro\u0144ski","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"JVM Tuesday vol. 69 &#8211; Co przyniesie Java 18?","datePublished":"2021-12-21T15:02:11+00:00","dateModified":"2022-09-19T11:10:44+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/"},"wordCount":1180,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-1-1.gif","articleSection":["JVM"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/","url":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/","name":"JVM Tuesday vol. 69 - Co przyniesie Java 18? - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-1-1.gif","datePublished":"2021-12-21T15:02:11+00:00","dateModified":"2022-09-19T11:10:44+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-1-1.gif","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-1-1.gif","width":480,"height":270},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-69-co-przyniesie-java-18\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"JVM Tuesday vol. 69 &#8211; Co przyniesie Java 18?"}]},{"@type":"WebSite","@id":"https:\/\/vived.io\/pl\/#website","url":"https:\/\/vived.io\/pl\/","name":"Vived","description":"platform empowering IT people and technology companies to synergic growth","publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vived.io\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/vived.io\/pl\/#organization","name":"Vived","url":"https:\/\/vived.io\/pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/","url":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","width":136,"height":45,"caption":"Vived"},"image":{"@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3","name":"Artur Skowro\u0144ski","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","caption":"Artur Skowro\u0144ski"}}]}},"blocks_vived":[{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>JDK 18 znalaz\u0142a si\u0119 pocz\u0105tkiem grudnia w fazie \u201cRampdown\u201d. Jest to javowa nomenklatura na popularny w wielu projektach przedwdro\u017ceniowy \u201cfeature freeze\u201d - w JDK nie pojawi\u0105 si\u0119 ju\u017c \u017cadne zaskakuj\u0105ce zmiany, tw\u00f3rcy skupi\u0105 si\u0119 obecnie wy\u0142\u0105cznie na poprawie bug\u00f3w. Dla nas oznacza to za\u015b ostateczn\u0105 list\u0119 wszystkich featur\u00f3w, kt\u00f3re do JDK trafi\u0105. Dlatego te\u017c dzisiaj, troch\u0119 nietypowo, znowu edycja specjalna - kompiluj\u0105ca wszystko, co trafi do nas wraz z JDK 18.<\/p>\n","innerContent":["\n<p>JDK 18 znalaz\u0142a si\u0119 pocz\u0105tkiem grudnia w fazie \u201cRampdown\u201d. Jest to javowa nomenklatura na popularny w wielu projektach przedwdro\u017ceniowy \u201cfeature freeze\u201d - w JDK nie pojawi\u0105 si\u0119 ju\u017c \u017cadne zaskakuj\u0105ce zmiany, tw\u00f3rcy skupi\u0105 si\u0119 obecnie wy\u0142\u0105cznie na poprawie bug\u00f3w. Dla nas oznacza to za\u015b ostateczn\u0105 list\u0119 wszystkich featur\u00f3w, kt\u00f3re do JDK trafi\u0105. Dlatego te\u017c dzisiaj, troch\u0119 nietypowo, znowu edycja specjalna - kompiluj\u0105ca wszystko, co trafi do nas wraz z JDK 18.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>Nowe funkcjonalno\u015bci<\/h2>\n","innerContent":["\n<h2>Nowe funkcjonalno\u015bci<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":3496,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-1-1.gif\" alt=\"\" class=\"wp-image-3496\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-1-1.gif\" alt=\"\" class=\"wp-image-3496\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/408\">408: Simple Web Server<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/408\">408: Simple Web Server<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/413\">413: Code Snippets in Java API Documentation<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/413\">413: Code Snippets in Java API Documentation<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zacznijmy od nowo\u015bci, kt\u00f3re maj\u0105 najwi\u0119ksze prawdopodobie\u0144stwo bycia u\u017cytymi przez \u201cprzemys\u0142owego\u201d programist\u0119. Je\u017celi w tej sekcji spodziewali\u015bcie si\u0119 jednak jakiego\u015b nowego syntaxu j\u0119zyka mo\u017cecie si\u0119 nieco rozczarowa\u0107. Nowo\u015bci dostarczane z now\u0105 edycj\u0105 Javy s\u0105 mocno hmmm\u2026 specjalistyczne.<\/p>\n","innerContent":["\n<p>Zacznijmy od nowo\u015bci, kt\u00f3re maj\u0105 najwi\u0119ksze prawdopodobie\u0144stwo bycia u\u017cytymi przez \u201cprzemys\u0142owego\u201d programist\u0119. Je\u017celi w tej sekcji spodziewali\u015bcie si\u0119 jednak jakiego\u015b nowego syntaxu j\u0119zyka mo\u017cecie si\u0119 nieco rozczarowa\u0107. Nowo\u015bci dostarczane z now\u0105 edycj\u0105 Javy s\u0105 mocno hmmm\u2026 specjalistyczne.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Specjalistyczne, bo raczej nie spodziewam si\u0119, \u017ce zapowied\u017a wbudowania w Jav\u0119 minimalistycznego Web Server wywr\u00f3ci spos\u00f3b w jaki programujemy. Narz\u0119dzie ma by\u0107 przydatne do tworzenia prototyp\u00f3w, i ad hocowego kodowania oraz testowania, zw\u0142aszcza w kontek\u015bcie edukacyjnym - i o ile rozumiem w jaki\u015b spos\u00f3b jego wprowadzenie, to naprawd\u0119 nie potrafi\u0119 si\u0119 nim jako\u015b \u201cjara\u0107\u201d.<\/p>\n","innerContent":["\n<p>Specjalistyczne, bo raczej nie spodziewam si\u0119, \u017ce zapowied\u017a wbudowania w Jav\u0119 minimalistycznego Web Server wywr\u00f3ci spos\u00f3b w jaki programujemy. Narz\u0119dzie ma by\u0107 przydatne do tworzenia prototyp\u00f3w, i ad hocowego kodowania oraz testowania, zw\u0142aszcza w kontek\u015bcie edukacyjnym - i o ile rozumiem w jaki\u015b spos\u00f3b jego wprowadzenie, to naprawd\u0119 nie potrafi\u0119 si\u0119 nim jako\u015b \u201cjara\u0107\u201d.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Narz\u0119dzie uruchamiane ma by\u0107 z wiersza polecenia i potrafi\u0107 serwowa\u0107 statyczne pliki w bie\u017c\u0105cym katalogu komend\u0105 <em>java -m jdk.httpserver<\/em>.<em> <\/em>Wersja CLI posiada\u0107 b\u0119dzie podstawowe opcje konfiguracyjne, jak wyb\u00f3r portu czy adresu do zbindowania. Dla tych, kt\u00f3rzy chc\u0105 troch\u0119 bardziej pokonfigurowa\u0107 swoje rozwi\u0105zanie, dost\u0119pna b\u0119dzie te\u017c mo\u017cliwo\u015b\u0107 odpalenia ca\u0142o\u015bci z poziomu kodu javowego.<\/p>\n","innerContent":["\n<p>Narz\u0119dzie uruchamiane ma by\u0107 z wiersza polecenia i potrafi\u0107 serwowa\u0107 statyczne pliki w bie\u017c\u0105cym katalogu komend\u0105 <em>java -m jdk.httpserver<\/em>.<em> <\/em>Wersja CLI posiada\u0107 b\u0119dzie podstawowe opcje konfiguracyjne, jak wyb\u00f3r portu czy adresu do zbindowania. Dla tych, kt\u00f3rzy chc\u0105 troch\u0119 bardziej pokonfigurowa\u0107 swoje rozwi\u0105zanie, dost\u0119pna b\u0119dzie te\u017c mo\u017cliwo\u015b\u0107 odpalenia ca\u0142o\u015bci z poziomu kodu javowego.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Druga zmiana jest ciekawsza, aczkolwiek znaj\u0105c mi\u0142o\u015b\u0107 bran\u017cy do pisania dokumentacji, ponownie dotknie tylko wybranych programist\u00f3w JEP 413 wprowadza znacznik @snippet do JavaDoc, co ma na celu upro\u015bci\u0107 do\u0142\u0105czanie przyk\u0142adowego kodu \u017ar\u00f3d\u0142owego do dokumentacji API.<\/p>\n","innerContent":["\n<p>Druga zmiana jest ciekawsza, aczkolwiek znaj\u0105c mi\u0142o\u015b\u0107 bran\u017cy do pisania dokumentacji, ponownie dotknie tylko wybranych programist\u00f3w JEP 413 wprowadza znacznik @snippet do JavaDoc, co ma na celu upro\u015bci\u0107 do\u0142\u0105czanie przyk\u0142adowego kodu \u017ar\u00f3d\u0142owego do dokumentacji API.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Do tej pory dokumentacja nie posiada\u0142a specjalnego tagu pozwalaj\u0105cego programistom przekaza\u0107 przyk\u0142adowe u\u017cycia API. Teraz to si\u0119 zmieni. Co ciekawe, tw\u00f3rcy API zapewnili u\u017cytkownikom dwa r\u00f3\u017cne warianty. Przyk\u0142ady b\u0119dzie mo\u017cna przekaza\u0107 \u201cinline\u201d:<\/p>\n","innerContent":["\n<p>Do tej pory dokumentacja nie posiada\u0142a specjalnego tagu pozwalaj\u0105cego programistom przekaza\u0107 przyk\u0142adowe u\u017cycia API. Teraz to si\u0119 zmieni. Co ciekawe, tw\u00f3rcy API zapewnili u\u017cytkownikom dwa r\u00f3\u017cne warianty. Przyk\u0142ady b\u0119dzie mo\u017cna przekaza\u0107 \u201cinline\u201d:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">\/**\n * The following code shows how to use {@code Optional.isPresent}:\n * {@snippet :\n * if (v.isPresent()) {\n *     System.out.println(\"v: \" + v.get());\n * }\n * }\n *\/<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">\/**\n * The following code shows how to use {@code Optional.isPresent}:\n * {@snippet :\n * if (v.isPresent()) {\n *     System.out.println(\"v: \" + v.get());\n * }\n * }\n *\/<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ale r\u00f3wnie\u017c jako zewn\u0119trzny plik:<\/p>\n","innerContent":["\n<p>Ale r\u00f3wnie\u017c jako zewn\u0119trzny plik:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">\/**\n * The following code shows how to use {@code Optional.isPresent}:\n * {@snippet file=\"ShowOptional.java\" region=\"example\"}\n *\/\n---------------------------\npublic class ShowOptional {\n    void show(Optional&lt;String> v) {\n        \/\/ @start region=\"example\"\n        if (v.isPresent()) {\n            System.out.println(\"v: \" + v.get());\n        }\n        \/\/ @end\n    }\n}\n<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">\/**\n * The following code shows how to use {@code Optional.isPresent}:\n * {@snippet file=\"ShowOptional.java\" region=\"example\"}\n *\/\n---------------------------\npublic class ShowOptional {\n    void show(Optional&lt;String> v) {\n        \/\/ @start region=\"example\"\n        if (v.isPresent()) {\n            System.out.println(\"v: \" + v.get());\n        }\n        \/\/ @end\n    }\n}\n<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>Zmiany pod mask\u0105<\/h2>\n","innerContent":["\n<h2>Zmiany pod mask\u0105<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":3497,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-2-1.gif\" alt=\"\" class=\"wp-image-3497\"\/><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-2-1.gif\" alt=\"\" class=\"wp-image-3497\"\/><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/416\">416: Reimplement Core Reflection with Method Handles<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/416\">416: Reimplement Core Reflection with Method Handles<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/400\">400: UTF-8 by Default<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/400\">400: UTF-8 by Default<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/418\">418: Internet-Address Resolution SPI<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/418\">418: Internet-Address Resolution SPI<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u017celi chodzi o dodatki z kategorii #nikogo, JEP 416 \u2013 Reimplement Core Reflection with Method Handles zdecydowanie nale\u017cy do moich ulubionych. JEP ten przynosi bowiem unifikacje sposobu, w jaki dzia\u0142a refleksja w Javie. W jego ramach dochodzi do reimplementacji <em>java.lang.reflect.Method, java.lang.reflect.Constructor<\/em>, i <em>java.lang.reflect.Field<\/em> na mechanizm invoke, wprowadzony w JDK 1.7. Jest to rodzaj sp\u0142aty d\u0142ugu technicznego przez zesp\u00f3\u0142 pracuj\u0105cy nad j\u0119zykiem i maszyn\u0105 wirtualn\u0105, jako u\u017cytkownicy nie zauwa\u017cymy wi\u0119c jakich\u015b znacz\u0105cych zmian. JEP 416 jest jednak w zasadzie niezb\u0119dny do wprowadznia zmian w architekt\u00f3rze JVMa, kt\u00f3re przyjd\u0105 wraz z projektem Loom i Valhalla.<\/p>\n","innerContent":["\n<p>Je\u017celi chodzi o dodatki z kategorii #nikogo, JEP 416 \u2013 Reimplement Core Reflection with Method Handles zdecydowanie nale\u017cy do moich ulubionych. JEP ten przynosi bowiem unifikacje sposobu, w jaki dzia\u0142a refleksja w Javie. W jego ramach dochodzi do reimplementacji <em>java.lang.reflect.Method, java.lang.reflect.Constructor<\/em>, i <em>java.lang.reflect.Field<\/em> na mechanizm invoke, wprowadzony w JDK 1.7. Jest to rodzaj sp\u0142aty d\u0142ugu technicznego przez zesp\u00f3\u0142 pracuj\u0105cy nad j\u0119zykiem i maszyn\u0105 wirtualn\u0105, jako u\u017cytkownicy nie zauwa\u017cymy wi\u0119c jakich\u015b znacz\u0105cych zmian. JEP 416 jest jednak w zasadzie niezb\u0119dny do wprowadznia zmian w architekt\u00f3rze JVMa, kt\u00f3re przyjd\u0105 wraz z projektem Loom i Valhalla.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Nast\u0119pnym jest JEP o bardzo \u0142adnym, okr\u0105g\u0142ym numerze 400, kt\u00f3ry wprowadza wreszcie UTF-8 do Javy domy\u015blny spos\u00f3b kodowania znak\u00f3w. Cho\u0107 historycznie by\u0142o z tym r\u00f3\u017cnie obecnie \u017cyjemy w \u015bwiecie&nbsp; w kt\u00f3rym enkodowanie znak\u00f3w wydaje si\u0119 by\u0107 rozwi\u0105zanym problemem. Globalizacja (i po cz\u0119\u015bci te\u017c rozw\u00f3j hardware) sprawi\u0142y, \u017ce zamiast wielu lokalnych standard\u00f3w mamy obecnie jeden \u2013 Unicode Transformation Format, czyli popularny UTF, potrafi\u0105cy reprezentowa\u0107 znaki z wszystkich j\u0119zyk\u00f3w i dialekt\u00f3w, a dodatkowo wiele wi\u0119cej, jak kochane przez wszystkich emoji. W zwi\u0105zku z faktem, \u017ce wiele j\u0119zyk\u00f3w programowania postanowi\u0142o ju\u017c dawno uczyni\u0107 go rozwi\u0105zaniem domy\u015blnym, na podobny krok zdecydowa\u0142a si\u0119 r\u00f3wnie\u017c Java.&nbsp;<\/p>\n","innerContent":["\n<p>Nast\u0119pnym jest JEP o bardzo \u0142adnym, okr\u0105g\u0142ym numerze 400, kt\u00f3ry wprowadza wreszcie UTF-8 do Javy domy\u015blny spos\u00f3b kodowania znak\u00f3w. Cho\u0107 historycznie by\u0142o z tym r\u00f3\u017cnie obecnie \u017cyjemy w \u015bwiecie&nbsp; w kt\u00f3rym enkodowanie znak\u00f3w wydaje si\u0119 by\u0107 rozwi\u0105zanym problemem. Globalizacja (i po cz\u0119\u015bci te\u017c rozw\u00f3j hardware) sprawi\u0142y, \u017ce zamiast wielu lokalnych standard\u00f3w mamy obecnie jeden \u2013 Unicode Transformation Format, czyli popularny UTF, potrafi\u0105cy reprezentowa\u0107 znaki z wszystkich j\u0119zyk\u00f3w i dialekt\u00f3w, a dodatkowo wiele wi\u0119cej, jak kochane przez wszystkich emoji. W zwi\u0105zku z faktem, \u017ce wiele j\u0119zyk\u00f3w programowania postanowi\u0142o ju\u017c dawno uczyni\u0107 go rozwi\u0105zaniem domy\u015blnym, na podobny krok zdecydowa\u0142a si\u0119 r\u00f3wnie\u017c Java.&nbsp;<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>O ile dla sta\u0142ych czytelnik\u00f3w wi\u0119kszo\u015b\u0107 z powy\u017cszych opisywanych zmian nie b\u0119dzie niczym nowym, tak jako ostatni przedstawimy Wam JEP, kt\u00f3ry umkn\u0105\u0142 naszej uwadze, a jest do\u015b\u0107 ciekawy. java.net.INetAddress to API s\u0142u\u017c\u0105ce do rozwi\u0105zywania nazwy host\u00f3w na adresy IP (i odwrotnie). Interfejs API obecnie korzysta z natywnego rozwi\u0105zywania DNS\u00f3w dostarczanego przez systemy operacyjne. Takowe w wi\u0119kszo\u015bci przypadk\u00f3w operuje na lokalnym pliku hosts i zewn\u0119trznych DNS-ach. S\u0105 to rozwi\u0105zania synchroniczne, w zwi\u0105zku z tym na potrzeby prac nad projektem Loom musza pojawi\u0107 si\u0119 w JVMie alternatywy. Dlatego te\u017c w ramach prac nad JEP-418 interfejs INetAddress ma by\u0107 oddzielony od implementacji, co umo\u017cliwi stworzenie odpowiednich alternatyw dzia\u0142aj\u0105cych w spos\u00f3b nieblokuj\u0105cy<\/p>\n","innerContent":["\n<p>O ile dla sta\u0142ych czytelnik\u00f3w wi\u0119kszo\u015b\u0107 z powy\u017cszych opisywanych zmian nie b\u0119dzie niczym nowym, tak jako ostatni przedstawimy Wam JEP, kt\u00f3ry umkn\u0105\u0142 naszej uwadze, a jest do\u015b\u0107 ciekawy. java.net.INetAddress to API s\u0142u\u017c\u0105ce do rozwi\u0105zywania nazwy host\u00f3w na adresy IP (i odwrotnie). Interfejs API obecnie korzysta z natywnego rozwi\u0105zywania DNS\u00f3w dostarczanego przez systemy operacyjne. Takowe w wi\u0119kszo\u015bci przypadk\u00f3w operuje na lokalnym pliku hosts i zewn\u0119trznych DNS-ach. S\u0105 to rozwi\u0105zania synchroniczne, w zwi\u0105zku z tym na potrzeby prac nad projektem Loom musza pojawi\u0107 si\u0119 w JVMie alternatywy. Dlatego te\u017c w ramach prac nad JEP-418 interfejs INetAddress ma by\u0107 oddzielony od implementacji, co umo\u017cliwi stworzenie odpowiednich alternatyw dzia\u0142aj\u0105cych w spos\u00f3b nieblokuj\u0105cy<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>Lektura nadprogramowa:<\/h3>\n","innerContent":["\n<h3>Lektura nadprogramowa:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[],"innerHTML":"\n<ul><li><a href=\"https:\/\/inside.java\/2021\/10\/04\/the-default-charset-jep400\/\">Jep 400 and the default charset \u2013 Inside.java<\/a><\/li><li><a href=\"https:\/\/thedatastudio.net\/history_of_character_encoding.htm\">A Short History Of Character Encoding<\/a><\/li><\/ul>\n","innerContent":["\n<ul><li><a href=\"https:\/\/inside.java\/2021\/10\/04\/the-default-charset-jep400\/\">Jep 400 and the default charset \u2013 Inside.java<\/a><\/li><li><a href=\"https:\/\/thedatastudio.net\/history_of_character_encoding.htm\">A Short History Of Character Encoding<\/a><\/li><\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>Inkubator<\/h2>\n","innerContent":["\n<h2>Inkubator<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":3498,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-4.gif\" alt=\"\" class=\"wp-image-3498\"\/><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-4.gif\" alt=\"\" class=\"wp-image-3498\"\/><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/417\">417: Vector API (Third Incubator)<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/417\">417: Vector API (Third Incubator)<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/419\">419: Foreign Function &amp; Memory API (Second Incubator)<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/419\">419: Foreign Function &amp; Memory API (Second Incubator)<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/420\">420: Pattern Matching for switch (Second Preview)<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/420\">420: Pattern Matching for switch (Second Preview)<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tutaj nie b\u0119d\u0119 si\u0119 d\u0142ugo rozgadywa\u0142 - ka\u017cde z powy\u017cszych API ju\u017c cho\u0107 raz w inkubatorze by\u0142o, a zmiany w nich s\u0105 na tyle kosmetyczne, \u017ce my\u015bl\u0119 \u017ce z czystym sumieniem mog\u0119 Was odes\u0142a\u0107 do oryginalnych dokument\u00f3w.&nbsp;<\/p>\n","innerContent":["\n<p>Tutaj nie b\u0119d\u0119 si\u0119 d\u0142ugo rozgadywa\u0142 - ka\u017cde z powy\u017cszych API ju\u017c cho\u0107 raz w inkubatorze by\u0142o, a zmiany w nich s\u0105 na tyle kosmetyczne, \u017ce my\u015bl\u0119 \u017ce z czystym sumieniem mog\u0119 Was odes\u0142a\u0107 do oryginalnych dokument\u00f3w.&nbsp;<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Powiedzmy sobie prawd\u0119 - ludzie u\u017cywaj\u0105cy funkcjonalno\u015bci w preview pewnie i tak ju\u017c dawno si\u0119 z powy\u017cszymi JEPami zapoznali. Dla reszty niech wystarczy fakt, \u017ce Vector API oraz Foreign Function &amp; Memory API przynosz\u0105 usprawnienia kompatybilno\u015bci z kodem natywnym, a Pattern Matching for switch to nic innego jak dalsze wprowadzanie kawa\u0142ek po kawa\u0142ku Pattern Matchingu do Javy.<\/p>\n","innerContent":["\n<p>Powiedzmy sobie prawd\u0119 - ludzie u\u017cywaj\u0105cy funkcjonalno\u015bci w preview pewnie i tak ju\u017c dawno si\u0119 z powy\u017cszymi JEPami zapoznali. Dla reszty niech wystarczy fakt, \u017ce Vector API oraz Foreign Function &amp; Memory API przynosz\u0105 usprawnienia kompatybilno\u015bci z kodem natywnym, a Pattern Matching for switch to nic innego jak dalsze wprowadzanie kawa\u0142ek po kawa\u0142ku Pattern Matchingu do Javy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>A co wylatuje?<\/h2>\n","innerContent":["\n<h2>A co wylatuje?<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":3499,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-5.gif\" alt=\"\" class=\"wp-image-3499\"\/><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-5.gif\" alt=\"\" class=\"wp-image-3499\"\/><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/421\">JEP 421: Deprecate Finalization for Removal<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/openjdk.java.net\/jeps\/421\">JEP 421: Deprecate Finalization for Removal<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To mo\u017ce tak na koniec JEP 421: Deprecate Finalization for Removal - czyli deprekacja mechanizmu finalizator\u00f3w. Dla tych, kt\u00f3rzy z finalizatorami nigdy nie mieli do czynienia, m\u00f3wimy o formie hooka\/aspektu, odpalanego bezpo\u015brednio przed zniszczeniami obiektu przez garbage collector. To, co w teorii brzmi jak do\u015b\u0107 przydatna mo\u017cliwo\u015b\u0107, w praktyce by\u0142o funkcj\u0105 mocno nieprzewidywaln\u0105 (istnia\u0142 szereg sytuacji, gdzie finalizer z r\u00f3\u017cnych powod\u00f3w nie by\u0142 odpalany) i dlatego r\u00f3wnie\u017c bardzo rzadko u\u017cywan\u0105.<\/p>\n","innerContent":["\n<p>To mo\u017ce tak na koniec JEP 421: Deprecate Finalization for Removal - czyli deprekacja mechanizmu finalizator\u00f3w. Dla tych, kt\u00f3rzy z finalizatorami nigdy nie mieli do czynienia, m\u00f3wimy o formie hooka\/aspektu, odpalanego bezpo\u015brednio przed zniszczeniami obiektu przez garbage collector. To, co w teorii brzmi jak do\u015b\u0107 przydatna mo\u017cliwo\u015b\u0107, w praktyce by\u0142o funkcj\u0105 mocno nieprzewidywaln\u0105 (istnia\u0142 szereg sytuacji, gdzie finalizer z r\u00f3\u017cnych powod\u00f3w nie by\u0142 odpalany) i dlatego r\u00f3wnie\u017c bardzo rzadko u\u017cywan\u0105.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dodatkowo, JDK 1.7 wprowadzi\u0142 du\u017co lepiej zaprojektowany mechanizm try-with-resources, kt\u00f3ry zast\u0105pi\u0142 finalizacje w najpopularniejszych przypadkach u\u017cycia, takich jak np. zamykanie po\u0142\u0105cze\u0144 do pliku. Dlatego pozostaje przy twierdzeniu, \u017ce dla wi\u0119kszo\u015bci ludzi usuni\u0119cie finalizator\u00f3w pozostaje ciekawostk\u0105, podobn\u0105 do sytuacji z Security Managerem. Je\u015bli jednak jeste\u015bcie ciekaw, jakie s\u0105 alternatywy - polecam oryginalny JEPem albo pi\u0119tnasty odcinek Inside Java Newscast od Oracle, kt\u00f3ry znajdziecie poni\u017cej.&nbsp;<\/p>\n","innerContent":["\n<p>Dodatkowo, JDK 1.7 wprowadzi\u0142 du\u017co lepiej zaprojektowany mechanizm try-with-resources, kt\u00f3ry zast\u0105pi\u0142 finalizacje w najpopularniejszych przypadkach u\u017cycia, takich jak np. zamykanie po\u0142\u0105cze\u0144 do pliku. Dlatego pozostaje przy twierdzeniu, \u017ce dla wi\u0119kszo\u015bci ludzi usuni\u0119cie finalizator\u00f3w pozostaje ciekawostk\u0105, podobn\u0105 do sytuacji z Security Managerem. Je\u015bli jednak jeste\u015bcie ciekaw, jakie s\u0105 alternatywy - polecam oryginalny JEPem albo pi\u0119tnasty odcinek Inside Java Newscast od Oracle, kt\u00f3ry znajdziecie poni\u017cej.&nbsp;<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>Lektura nadprogramowa<\/h3>\n","innerContent":["\n<h3>Lektura nadprogramowa<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[],"innerHTML":"\n<ul><li><a href=\"https:\/\/www.youtube.com\/watch?v=eDgBnjOid-g\">What Happens to Finalization in JDK 18? - Inside Java Newscast #15<\/a><\/li><\/ul>\n","innerContent":["\n<ul><li><a href=\"https:\/\/www.youtube.com\/watch?v=eDgBnjOid-g\">What Happens to Finalization in JDK 18? - Inside Java Newscast #15<\/a><\/li><\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>Podsumowanie<\/h2>\n","innerContent":["\n<h2>Podsumowanie<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Poprzednie wydanie Javy, JDK 17, by\u0142o LTSem o wyd\u0142u\u017conym przysz\u0142ym wsparciu. Dlatego te\u017c mo\u017cna si\u0119 by\u0142o spodziewa\u0107, \u017ce wszelkie zmiany podwy\u017cszonego ryzyka zostan\u0105 zostawione na kolejne w stosunku do niego wersje. JDK 18 to jednak edycja bardzo przej\u015bciowa. Nowy cykl releasowy przyni\u00f3s\u0142 jak zwykle pewne dodatki \u201cprzyrostowe\u201d, ale <strong>nie widz\u0119 dobrego powodu, \u017ceby ktokolwiek musia\u0142 natychmiast rzuca\u0107 si\u0119 i upgradowa\u0107 do \u201cosiemnastki\u201d<\/strong> - wida\u0107, \u017ce tw\u00f3rcy dopiero si\u0119 rozgrzewaj\u0105 i zbieraj\u0105 si\u0142y przed wdro\u017ceniem nadchodz\u0105cych, du\u017cych inicjatyw jak Valhalla czy Loom, kt\u00f3ry w ko\u0144cu niedawno ukaza\u0142 si\u0119 nareszcie w pierwszym oficjalnym preview.<\/p>\n","innerContent":["\n<p>Poprzednie wydanie Javy, JDK 17, by\u0142o LTSem o wyd\u0142u\u017conym przysz\u0142ym wsparciu. Dlatego te\u017c mo\u017cna si\u0119 by\u0142o spodziewa\u0107, \u017ce wszelkie zmiany podwy\u017cszonego ryzyka zostan\u0105 zostawione na kolejne w stosunku do niego wersje. JDK 18 to jednak edycja bardzo przej\u015bciowa. Nowy cykl releasowy przyni\u00f3s\u0142 jak zwykle pewne dodatki \u201cprzyrostowe\u201d, ale <strong>nie widz\u0119 dobrego powodu, \u017ceby ktokolwiek musia\u0142 natychmiast rzuca\u0107 si\u0119 i upgradowa\u0107 do \u201cosiemnastki\u201d<\/strong> - wida\u0107, \u017ce tw\u00f3rcy dopiero si\u0119 rozgrzewaj\u0105 i zbieraj\u0105 si\u0142y przed wdro\u017ceniem nadchodz\u0105cych, du\u017cych inicjatyw jak Valhalla czy Loom, kt\u00f3ry w ko\u0144cu niedawno ukaza\u0142 si\u0119 nareszcie w pierwszym oficjalnym preview.<\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10029","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/comments?post=10029"}],"version-history":[{"count":1,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10029\/revisions"}],"predecessor-version":[{"id":10542,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10029\/revisions\/10542"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/7848"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=10029"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=10029"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=10029"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}