{"id":9993,"date":"2022-03-22T16:45:34","date_gmt":"2022-03-22T15:45:34","guid":{"rendered":"https:\/\/vived.io\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/"},"modified":"2022-09-19T13:10:40","modified_gmt":"2022-09-19T11:10:40","slug":"jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/","title":{"rendered":"JVM Tuesday vol. 80 &#8211; Java 18 \ud83e\udd70"},"content":{"rendered":"\n<p>Okr\u0105g\u0142a edycja naszego przegl\u0105du (osiemdziesi\u0105t edycji \ud83e\udd2f) zbiega si\u0119 z now\u0105 Jav\u0105, kt\u00f3ra w chwili publikacji powinna ju\u017c by\u0107 dost\u0119pna do pobrania. Dlatego te\u017c dzisiaj skupimy si\u0119 g\u0142\u00f3wnie na niej i zobaczymy, co te\u017c ciekawego przynosi JDK 18 &#8211; Java osi\u0105ga wydaniow\u0105 pe\u0142noletno\u015b\u0107.<\/p>\n\n\n\n<p>No i mamy to &#8211; po kilku tygodniach test\u00f3w kolejnych wyda\u0144 Release Candidate w dniu dzisiejszym powinna pojawi\u0107 si\u0119 nowa Java (link do takowej powinni\u015bcie m\u00f3c znale\u017a\u0107 <a href=\"https:\/\/openjdk.java.net\/projects\/jdk\/18\/\">tutaj<\/a>). <\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"embed-responsive embed-responsive-16by9\"><iframe loading=\"lazy\" title=\"Oracle Developer Live - Java Innovations\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/YX1UQYctNFc?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><figcaption>Update: w\u0142a\u015bnie zacz\u0105\u0142 si\u0119 live-event premierowy<\/figcaption><\/figure>\n\n\n\n<p>Po JDK 17, kt\u00f3re jak pewnie wielu z Was pami\u0119ta by\u0142o wydaniem typu LTS (Long-Time Support), przychodzi \u201cosiemnastka\u201d, kt\u00f3rej zakres nie nale\u017cy do jakich\u015b olbrzymich, ale i tak jest w niej troch\u0119 rzecyz, nad kt\u00f3rymi warto si\u0119 pochyli\u0107. Jak to bywa przy pisaniu cotygodniowych przegl\u0105d\u00f3w, wi\u0119kszo\u015b\u0107 z rzeczy, kt\u00f3re pojawi\u0105 si\u0119 w nowej Javie ju\u017c kiedy\u015b opisywali\u015bmy, ale w dzisiejszej edycji zbierzemy to wszystko do kupy w jednym miejscu aby da\u0107 Wam pe\u0142ny obraz tego, co pojawia si\u0119 w nowym wydaniu.<br>PS: jest to lekko zmodyfikowany artyku\u0142, kt\u00f3ry ju\u017c mieli\u015bcie okazje dosta\u0107 przy okazji fazy Rampdown \ud83d\ude09. Mimo wszystko <em>zalecam powt\u00f3rk\u0119.&nbsp;<\/em><\/p>\n\n\n\n<h2 id=\"nowe-funkcjonalnosci\" data-num=1>Nowe funkcjonalno\u015bci<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/Dy5LXlWWoAYZU_Q.jpg\" alt=\"Maureen Wallbeoff on Twitter: &quot;Hey nonprofit friends! Today at 12:30 ET on  Facebook Live we're going to talk about Shiny Object Syndrome - why you  (or, ahem, someone you work with) might\"\/><\/figure><\/div>\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/openjdk.java.net\/jeps\/408\">408: Simple Web Server<\/a><\/li><li><a href=\"https:\/\/openjdk.java.net\/jeps\/413\">413: Code Snippets in Java API Documentation<\/a><\/li><\/ul>\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<ul class=\"wp-block-list\"><li><a href=\"https:\/\/openjdk.java.net\/jeps\/416\">416: Reimplement Core Reflection with Method Handles<\/a><\/li><li><a href=\"https:\/\/openjdk.java.net\/jeps\/400\">400: UTF-8 by Default<\/a><\/li><li><a href=\"https:\/\/openjdk.java.net\/jeps\/418\">418: Internet-Address Resolution SPI<\/a><\/li><\/ul>\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<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"226\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/giphy-22.gif\" alt=\"\" class=\"wp-image-4062\"\/><\/figure><\/div>\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/openjdk.java.net\/jeps\/417\">417: Vector API (Third Incubator)<\/a><\/li><li><a href=\"https:\/\/openjdk.java.net\/jeps\/419\">419: Foreign Function &amp; Memory API (Second Incubator)<\/a><\/li><li><a href=\"https:\/\/openjdk.java.net\/jeps\/420\">420: Pattern Matching for switch (Second Preview)<\/a><\/li><\/ul>\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<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"360\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/giphy-21-1.gif\" alt=\"\" class=\"wp-image-4061\"\/><\/figure><\/div>\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/openjdk.java.net\/jeps\/421\">JEP 421: Deprecate Finalization for Removal<\/a><\/li><\/ul>\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>Okr\u0105g\u0142a edycja naszego przegl\u0105du (osiemdziesi\u0105t edycji \ud83e\udd2f) zbiega si\u0119 z now\u0105 Jav\u0105, kt\u00f3ra w chwili publikacji powinna ju\u017c by\u0107 dost\u0119pna do pobrania. Dlatego te\u017c dzisiaj skupimy si\u0119 g\u0142\u00f3wnie na niej i zobaczymy, co te\u017c ciekawego przynosi JDK 18.<\/p>\n","protected":false},"author":10,"featured_media":7995,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[259],"tags":[],"class_list":["post-9993","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm-pl"],"acf":{"estimated_reading_time":"6","feature_image_blog":{"ID":7994,"id":7994,"title":"osiemnastka-urodziny-tort-min-2","filename":"osiemnastka-urodziny-tort-min-2.png","filesize":89697,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/osiemnastka-urodziny-tort-min-2.png","link":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/osiemnastka-urodziny-tort-min-2-2\/","alt":"","author":"10","description":"","caption":"","name":"osiemnastka-urodziny-tort-min-2-2","status":"inherit","uploaded_to":9993,"date":"2022-03-22 15:40:32","modified":"2022-03-22 15:40:32","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/vived.io\/wp-includes\/images\/media\/default.png","width":560,"height":280,"sizes":{"thumbnail":"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/osiemnastka-urodziny-tort-min-2-150x150.png","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/osiemnastka-urodziny-tort-min-2-300x150.png","medium-width":300,"medium-height":150,"medium_large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/osiemnastka-urodziny-tort-min-2.png","medium_large-width":560,"medium_large-height":280,"large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/osiemnastka-urodziny-tort-min-2.png","large-width":560,"large-height":280,"1536x1536":"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/osiemnastka-urodziny-tort-min-2.png","1536x1536-width":560,"1536x1536-height":280,"2048x2048":"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/osiemnastka-urodziny-tort-min-2.png","2048x2048-width":560,"2048x2048-height":280,"gform-image-choice-sm":"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/osiemnastka-urodziny-tort-min-2.png","gform-image-choice-sm-width":300,"gform-image-choice-sm-height":150,"gform-image-choice-md":"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/osiemnastka-urodziny-tort-min-2.png","gform-image-choice-md-width":400,"gform-image-choice-md-height":200,"gform-image-choice-lg":"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/osiemnastka-urodziny-tort-min-2.png","gform-image-choice-lg-width":560,"gform-image-choice-lg-height":280}},"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/JVM-7.png","feature_image_visible":true},"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. 80 - Java 18 \ud83e\udd70 - 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-80-java-18-%f0%9f%a5%b0\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JVM Tuesday vol. 80 - Java 18 \ud83e\udd70 - Vived\" \/>\n<meta property=\"og:description\" content=\"Okr\u0105g\u0142a edycja naszego przegl\u0105du (osiemdziesi\u0105t edycji \ud83e\udd2f) zbiega si\u0119 z now\u0105 Jav\u0105, kt\u00f3ra w chwili publikacji powinna ju\u017c by\u0107 dost\u0119pna do pobrania. Dlatego te\u017c dzisiaj skupimy si\u0119 g\u0142\u00f3wnie na niej i zobaczymy, co te\u017c ciekawego przynosi JDK 18.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2022-03-22T15:45:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-19T11:10:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/JVM-7.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\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-80-java-18-%f0%9f%a5%b0\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"JVM Tuesday vol. 80 &#8211; Java 18 \ud83e\udd70\",\"datePublished\":\"2022-03-22T15:45:34+00:00\",\"dateModified\":\"2022-09-19T11:10:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/\"},\"wordCount\":1308,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/JVM-7.png\",\"articleSection\":[\"JVM\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/\",\"url\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/\",\"name\":\"JVM Tuesday vol. 80 - Java 18 \ud83e\udd70 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/JVM-7.png\",\"datePublished\":\"2022-03-22T15:45:34+00:00\",\"dateModified\":\"2022-09-19T11:10:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/JVM-7.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/JVM-7.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JVM Tuesday vol. 80 &#8211; Java 18 \ud83e\udd70\"}]},{\"@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. 80 - Java 18 \ud83e\udd70 - 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-80-java-18-%f0%9f%a5%b0\/","og_locale":"pl_PL","og_type":"article","og_title":"JVM Tuesday vol. 80 - Java 18 \ud83e\udd70 - Vived","og_description":"Okr\u0105g\u0142a edycja naszego przegl\u0105du (osiemdziesi\u0105t edycji \ud83e\udd2f) zbiega si\u0119 z now\u0105 Jav\u0105, kt\u00f3ra w chwili publikacji powinna ju\u017c by\u0107 dost\u0119pna do pobrania. Dlatego te\u017c dzisiaj skupimy si\u0119 g\u0142\u00f3wnie na niej i zobaczymy, co te\u017c ciekawego przynosi JDK 18.","og_url":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/","og_site_name":"Vived","article_published_time":"2022-03-22T15:45:34+00:00","article_modified_time":"2022-09-19T11:10:40+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/JVM-7.png","type":"image\/png"}],"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-80-java-18-%f0%9f%a5%b0\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"JVM Tuesday vol. 80 &#8211; Java 18 \ud83e\udd70","datePublished":"2022-03-22T15:45:34+00:00","dateModified":"2022-09-19T11:10:40+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/"},"wordCount":1308,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/JVM-7.png","articleSection":["JVM"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/","url":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/","name":"JVM Tuesday vol. 80 - Java 18 \ud83e\udd70 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/JVM-7.png","datePublished":"2022-03-22T15:45:34+00:00","dateModified":"2022-09-19T11:10:40+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/JVM-7.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/JVM-7.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-80-java-18-%f0%9f%a5%b0\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"JVM Tuesday vol. 80 &#8211; Java 18 \ud83e\udd70"}]},{"@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>Okr\u0105g\u0142a edycja naszego przegl\u0105du (osiemdziesi\u0105t edycji \ud83e\udd2f) zbiega si\u0119 z now\u0105 Jav\u0105, kt\u00f3ra w chwili publikacji powinna ju\u017c by\u0107 dost\u0119pna do pobrania. Dlatego te\u017c dzisiaj skupimy si\u0119 g\u0142\u00f3wnie na niej i zobaczymy, co te\u017c ciekawego przynosi JDK 18 - Java osi\u0105ga wydaniow\u0105 pe\u0142noletno\u015b\u0107.<\/p>\n","innerContent":["\n<p>Okr\u0105g\u0142a edycja naszego przegl\u0105du (osiemdziesi\u0105t edycji \ud83e\udd2f) zbiega si\u0119 z now\u0105 Jav\u0105, kt\u00f3ra w chwili publikacji powinna ju\u017c by\u0107 dost\u0119pna do pobrania. Dlatego te\u017c dzisiaj skupimy si\u0119 g\u0142\u00f3wnie na niej i zobaczymy, co te\u017c ciekawego przynosi JDK 18 - Java osi\u0105ga wydaniow\u0105 pe\u0142noletno\u015b\u0107.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>No i mamy to - po kilku tygodniach test\u00f3w kolejnych wyda\u0144 Release Candidate w dniu dzisiejszym powinna pojawi\u0107 si\u0119 nowa Java (link do takowej powinni\u015bcie m\u00f3c znale\u017a\u0107 <a href=\"https:\/\/openjdk.java.net\/projects\/jdk\/18\/\">tutaj<\/a>). <\/p>\n","innerContent":["\n<p>No i mamy to - po kilku tygodniach test\u00f3w kolejnych wyda\u0144 Release Candidate w dniu dzisiejszym powinna pojawi\u0107 si\u0119 nowa Java (link do takowej powinni\u015bcie m\u00f3c znale\u017a\u0107 <a href=\"https:\/\/openjdk.java.net\/projects\/jdk\/18\/\">tutaj<\/a>). <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/embed","attrs":{"url":"https:\/\/youtu.be\/YX1UQYctNFc","type":"video","providerNameSlug":"youtube","responsive":true,"className":"wp-embed-aspect-16-9 wp-has-aspect-ratio"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/youtu.be\/YX1UQYctNFc\n<\/div><figcaption>Update: w\u0142a\u015bnie zacz\u0105\u0142 si\u0119 live-event premierowy<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/youtu.be\/YX1UQYctNFc\n<\/div><figcaption>Update: w\u0142a\u015bnie zacz\u0105\u0142 si\u0119 live-event premierowy<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Po JDK 17, kt\u00f3re jak pewnie wielu z Was pami\u0119ta by\u0142o wydaniem typu LTS (Long-Time Support), przychodzi \u201cosiemnastka\u201d, kt\u00f3rej zakres nie nale\u017cy do jakich\u015b olbrzymich, ale i tak jest w niej troch\u0119 rzecyz, nad kt\u00f3rymi warto si\u0119 pochyli\u0107. Jak to bywa przy pisaniu cotygodniowych przegl\u0105d\u00f3w, wi\u0119kszo\u015b\u0107 z rzeczy, kt\u00f3re pojawi\u0105 si\u0119 w nowej Javie ju\u017c kiedy\u015b opisywali\u015bmy, ale w dzisiejszej edycji zbierzemy to wszystko do kupy w jednym miejscu aby da\u0107 Wam pe\u0142ny obraz tego, co pojawia si\u0119 w nowym wydaniu.<br>PS: jest to lekko zmodyfikowany artyku\u0142, kt\u00f3ry ju\u017c mieli\u015bcie okazje dosta\u0107 przy okazji fazy Rampdown \ud83d\ude09. Mimo wszystko <em>zalecam powt\u00f3rk\u0119.&nbsp;<\/em><\/p>\n","innerContent":["\n<p>Po JDK 17, kt\u00f3re jak pewnie wielu z Was pami\u0119ta by\u0142o wydaniem typu LTS (Long-Time Support), przychodzi \u201cosiemnastka\u201d, kt\u00f3rej zakres nie nale\u017cy do jakich\u015b olbrzymich, ale i tak jest w niej troch\u0119 rzecyz, nad kt\u00f3rymi warto si\u0119 pochyli\u0107. Jak to bywa przy pisaniu cotygodniowych przegl\u0105d\u00f3w, wi\u0119kszo\u015b\u0107 z rzeczy, kt\u00f3re pojawi\u0105 si\u0119 w nowej Javie ju\u017c kiedy\u015b opisywali\u015bmy, ale w dzisiejszej edycji zbierzemy to wszystko do kupy w jednym miejscu aby da\u0107 Wam pe\u0142ny obraz tego, co pojawia si\u0119 w nowym wydaniu.<br>PS: jest to lekko zmodyfikowany artyku\u0142, kt\u00f3ry ju\u017c mieli\u015bcie okazje dosta\u0107 przy okazji fazy Rampdown \ud83d\ude09. Mimo wszystko <em>zalecam powt\u00f3rk\u0119.&nbsp;<\/em><\/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":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/Dy5LXlWWoAYZU_Q.jpg\" alt=\"Maureen Wallbeoff on Twitter: &quot;Hey nonprofit friends! Today at 12:30 ET on  Facebook Live we're going to talk about Shiny Object Syndrome - why you  (or, ahem, someone you work with) might\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/Dy5LXlWWoAYZU_Q.jpg\" alt=\"Maureen Wallbeoff on Twitter: &quot;Hey nonprofit friends! Today at 12:30 ET on  Facebook Live we're going to talk about Shiny Object Syndrome - why you  (or, ahem, someone you work with) might\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[],"innerHTML":"\n<ul><li><a href=\"https:\/\/openjdk.java.net\/jeps\/408\">408: Simple Web Server<\/a><\/li><li><a href=\"https:\/\/openjdk.java.net\/jeps\/413\">413: Code Snippets in Java API Documentation<\/a><\/li><\/ul>\n","innerContent":["\n<ul><li><a href=\"https:\/\/openjdk.java.net\/jeps\/408\">408: Simple Web Server<\/a><\/li><li><a href=\"https:\/\/openjdk.java.net\/jeps\/413\">413: Code Snippets in Java API Documentation<\/a><\/li><\/ul>\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\/list","attrs":[],"innerBlocks":[],"innerHTML":"\n<ul><li><a href=\"https:\/\/openjdk.java.net\/jeps\/416\">416: Reimplement Core Reflection with Method Handles<\/a><\/li><li><a href=\"https:\/\/openjdk.java.net\/jeps\/400\">400: UTF-8 by Default<\/a><\/li><li><a href=\"https:\/\/openjdk.java.net\/jeps\/418\">418: Internet-Address Resolution SPI<\/a><\/li><\/ul>\n","innerContent":["\n<ul><li><a href=\"https:\/\/openjdk.java.net\/jeps\/416\">416: Reimplement Core Reflection with Method Handles<\/a><\/li><li><a href=\"https:\/\/openjdk.java.net\/jeps\/400\">400: UTF-8 by Default<\/a><\/li><li><a href=\"https:\/\/openjdk.java.net\/jeps\/418\">418: Internet-Address Resolution SPI<\/a><\/li><\/ul>\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":4062,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/giphy-22.gif\" alt=\"\" class=\"wp-image-4062\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/giphy-22.gif\" alt=\"\" class=\"wp-image-4062\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[],"innerHTML":"\n<ul><li><a href=\"https:\/\/openjdk.java.net\/jeps\/417\">417: Vector API (Third Incubator)<\/a><\/li><li><a href=\"https:\/\/openjdk.java.net\/jeps\/419\">419: Foreign Function &amp; Memory API (Second Incubator)<\/a><\/li><li><a href=\"https:\/\/openjdk.java.net\/jeps\/420\">420: Pattern Matching for switch (Second Preview)<\/a><\/li><\/ul>\n","innerContent":["\n<ul><li><a href=\"https:\/\/openjdk.java.net\/jeps\/417\">417: Vector API (Third Incubator)<\/a><\/li><li><a href=\"https:\/\/openjdk.java.net\/jeps\/419\">419: Foreign Function &amp; Memory API (Second Incubator)<\/a><\/li><li><a href=\"https:\/\/openjdk.java.net\/jeps\/420\">420: Pattern Matching for switch (Second Preview)<\/a><\/li><\/ul>\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":4061,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/giphy-21-1.gif\" alt=\"\" class=\"wp-image-4061\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/giphy-21-1.gif\" alt=\"\" class=\"wp-image-4061\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[],"innerHTML":"\n<ul><li><a href=\"https:\/\/openjdk.java.net\/jeps\/421\">JEP 421: Deprecate Finalization for Removal<\/a><\/li><\/ul>\n","innerContent":["\n<ul><li><a href=\"https:\/\/openjdk.java.net\/jeps\/421\">JEP 421: Deprecate Finalization for Removal<\/a><\/li><\/ul>\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\/9993","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=9993"}],"version-history":[{"count":1,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9993\/revisions"}],"predecessor-version":[{"id":10518,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9993\/revisions\/10518"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/7995"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=9993"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=9993"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=9993"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}