{"id":1060,"date":"2025-08-11T22:41:01","date_gmt":"2025-08-12T02:41:01","guid":{"rendered":"https:\/\/efsavage.com\/blog\/?p=1060"},"modified":"2025-08-11T22:41:18","modified_gmt":"2025-08-12T02:41:18","slug":"java-15-though-25-catchup","status":"publish","type":"post","link":"https:\/\/efsavage.com\/blog\/posts\/java-15-though-25-catchup\/","title":{"rendered":"Java 15 though 25 Catchup"},"content":{"rendered":"\n<p>Continuing my <a href=\"https:\/\/efsavage.com\/blog\/posts\/java-8-though-14-catchup\/\">previous post<\/a>, let&#8217;s pick up the Java story where we left off&#8230;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Java 15 (Sept 2020)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Sealed Classes<\/h3>\n\n\n\n<p>A nice organizational tool.  Not very handy for my personal projects but definitely useful across a large org.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Java 16 (March 2021)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Stream.toList()<\/h3>\n\n\n\n<p>Not much else in this release besides this minor but more readable improvement.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Java 17 (Sept 2021, LTS)<\/h2>\n\n\n\n<p>Nothing really new here just polish and finalizing things.  It looks like this might be the dominant stable version in many enterprises and the baseline for open source right now.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Java 18 (March 2022)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Simple Web Server<\/h3>\n\n\n\n<p>This might be very useful for my prototypes.  It wasn&#8217;t hard to do before but if this works with whatever is a good basic HTTP\/API framework these days then it&#8217;s great that it&#8217;s built-in.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">@snippet in Javadoc<\/h3>\n\n\n\n<p>I do actually comment my personal code fairly well (if I&#8217;m submitting it, even to a private repo) so this seems nice.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Java 19 (Sept 2022)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Record Patterns<\/h3>\n\n\n\n<p>I&#8217;m only reading some examples of this and definitely want to try it but it seems like it could be pretty clean.  It&#8217;s kind of like Go interfaces, which I&#8217;m a fan of (though I wish they had a different name since they&#8217;re flipped backwards in some regards to older language&#8217;s interfaces).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Virtual Threads<\/h3>\n\n\n\n<p>Very interesting.  I do tend to do a lot of concurrency in my projects so I&#8217;m definitely going to be spending some time with this one.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Java 20 (March 2023)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Scoped Values<\/h3>\n\n\n\n<p>ThreadLocals aren&#8217;t difficult <em>per se<\/em> but they are weird and easy to misuse.  Streamlining the easiest usages of them seems like a win.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Java 21 (Sept 2023, LTS)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">String Templates<\/h3>\n\n\n\n<p>This syntax seems like it might be a little <em>too<\/em> streamlined for readability, especially on review, but that seems solvable with tools so I&#8217;ll wait and see if I like these.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Structured Concurrency<\/h3>\n\n\n\n<p>I&#8217;ve rolled my own versions of this very useful concept many times so it would be great if this could standardize that.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Sequenced Collections<\/h3>\n\n\n\n<p>On the one hand this seems like a nice taxonomic update, but it also seems like it could be easily confused with <em>Sorted Collections<\/em>, but maybe that&#8217;s just me.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Java 22 (March 2024)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Statements before super(\u2026) \/ this(\u2026) in constructors<\/h3>\n\n\n\n<p>Ooh, this seems like it&#8217;s a bigger change than it appears on the surface.  I have vague recollections of some significant class-layout workarounds for this limitation, but I&#8217;m also getting a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Wikipedia:Chesterton%27s_fence\">Chesterton&#8217;s Fence<\/a> vibe here in why this limitation existed in the first place.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stream Gatherers<\/h3>\n\n\n\n<p>A few projects in my queue are data\/statistics-based so this might come in handy, if third-party libraries don&#8217;t already handle this well enough.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Java 23 (Sept 2024)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Implicit classes &amp; instance main<\/h3>\n\n\n\n<p>I never really had any issues with this boilerplate because the IDE always wrote it and it never really changed after that, but it&#8217;s cool that it got streamlined.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Java 24 (March, 2025)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Key Derivation Function API<\/h3>\n\n\n\n<p>Figuring out how to get signed APIs working almost always feels like it&#8217;s harder than it should be, so I&#8217;m all in favor of standardizing it.  I&#8217;m not sure what the long-term impact is here because I&#8217;m sure the next great crypto approach will have some structural reason you can&#8217;t use this&#8230;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Java 25 (September 2025?, LTS)<\/h2>\n\n\n\n<p>The next LTS, nothing really major on the menu but a number of finalizations which will be nice.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Final Thoughts<\/h2>\n\n\n\n<p>I started this mini research project thinking there were going to be more things like lambdas which I thought were going to <em>maybe<\/em> take the language away from what I always liked about it, but that definitely doesn&#8217;t seem to be the case.  There are a ton of streamlined features that work well within the same mental model and &#8220;spirit&#8221; of the language.  I&#8217;m really looking forward to digging in and using almost all of them.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Continuing my previous post, let&#8217;s pick up the Java story where we left off&#8230; Java 15 (Sept 2020) Sealed Classes A nice organizational tool. Not very handy for my personal projects but definitely useful across a large org. Java 16 (March 2021) Stream.toList() Not much else in this release besides this minor but more readable&hellip; <\/p>\n<p class=\"simppeli-read-more\"><a href=\"https:\/\/efsavage.com\/blog\/posts\/java-15-though-25-catchup\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Java 15 though 25 Catchup<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[88],"tags":[376],"series":[],"class_list":["post-1060","post","type-post","status-publish","format-standard","hentry","category-programming","tag-java"],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p1AkJt-h6","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/efsavage.com\/blog\/wp-json\/wp\/v2\/posts\/1060","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/efsavage.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/efsavage.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/efsavage.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/efsavage.com\/blog\/wp-json\/wp\/v2\/comments?post=1060"}],"version-history":[{"count":4,"href":"https:\/\/efsavage.com\/blog\/wp-json\/wp\/v2\/posts\/1060\/revisions"}],"predecessor-version":[{"id":1066,"href":"https:\/\/efsavage.com\/blog\/wp-json\/wp\/v2\/posts\/1060\/revisions\/1066"}],"wp:attachment":[{"href":"https:\/\/efsavage.com\/blog\/wp-json\/wp\/v2\/media?parent=1060"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/efsavage.com\/blog\/wp-json\/wp\/v2\/categories?post=1060"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/efsavage.com\/blog\/wp-json\/wp\/v2\/tags?post=1060"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/efsavage.com\/blog\/wp-json\/wp\/v2\/series?post=1060"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}