Ranking Java Features Added from Versions 8 to 21!

preview_player
Показать описание
Ranking Java Features from Java 8 to 21 | Ken Kousen's Ultimate Tier List

Join Ken Kousen in 'Tales from the Jar Side' as he ranks the biggest Java features introduced between versions 8 and 21. With over two decades of experience in the Java ecosystem, Ken gives his personal take on functionalities like functional programming, records, text blocks, sealed classes, and more. He categorizes them into tiers ranging from 'Pure Awesomeness' to 'Seriously? No.' Discover which features have transformed his coding practices and which ones fell flat. Whether you're a seasoned Java developer or a curious newbie, this insightful breakdown is not to be missed!

0:00 Java Tier List
01:26 Tier List Introduction
02:34 Functional Features
03:27 Collection Factory Methods
04:31 LVTI
05:49 HTTP Client API
07:57 JShell
09:30 Single File Code Execution
11:34 Switch Expressions
12:51 Text Blocks
14:04 Records
15:23 Pattern Matching
16:53 Sealed Classes and Interfaces
18:38 Virtual Threads
21:35 JPMS
25:08 Conclusions
Рекомендации по теме
Комментарии
Автор

I wish you explained each feature in its own video... It seems like you really understand them and go deeper than the 101s. New subscriber here.

TheChexmo
Автор

Yes, I'm very grateful, that we managed to get our legacy (20 year old) codebase up to Java 8, so I can use these amazing features.

romankuratli
Автор

Thanks for the video, very interesting. Single File Code Execution (9:30) means Java can compete a little with Groovy when it comes to scripting. Such scripts are useful when you have a large application and want to make helper scripts to extract and update data. Such code is associated with the application and should be in the source tree, and may even use domain objects or services provided by the application but the script code itself shouldn't be embedded in the application itself. Single File Code Execution makes such maintenance scripts much easier to do without having to reach out to Groovy (introducing dependencies/versioning issues) or go to something hideously slow like Python. The same Java skills can be used for application development and maintenance operations (DevOps) and Single File Code Execution makes this a lot more do-able with Java alone. Subbed.

staubsauger
Автор

Thanks Ken. I have been a fan since your keynote speech at Dev Nexus 2012.

AlwynSchoeman
Автор

20:19 IMHO such a benefit in the platform is a big deal, even if I don't use the feature directly! The big story with the system-level features like virtual threads (and somewhat, with modules) is that Java is looking beyond feature-parity with C#: they are looking at Node/Javascript for areas to improve. This is true with respect to throughput metrics, start-up times, binary footprint, and release cadence (IMHO modules and cleaning up the JDK facilitates faster feature development).

michaeleaster
Автор

Entertaining video, I much agree with you. Except for a small detail that most people don't know : the switch in java, when you have cases as consecutive integers, gets compiled into a computed goto !
This is very useful for writing bytecode interpreters and python developers for example have been asking that for years, it only made it recently in Python.

harrykaradimas
Автор

super-fun video: thank you! Some comments: (a) I also encourage everyone to read Brian Goetz' article on data-oriented programming, which combines several features into a unified idea. (b) The history of modules, as Ken surely knows, is more complicated, as the OSGi initiative (re: bundles) was getting traction circa 2010, and there were other competing ideas as well. The Java team decided to do their own spec, and _then_ start with the JDK, which took a long, long time. There was serious debate in the community over this; pundits wondered if it would ever be complete (and the OSGi camp was incensed that their work wasn't being used). Java 9 was _finally_ the end result. If the Java team had waited longer, it would have only extended the uncertainty and acrimony. I do agree that adoption and impact seems to be quite low.

michaeleaster
Автор

Nice video! I agree with most of it. But I would definitely put Java Time (introduced in Java 8) in the ‘Pure Awesome’ tier. Gregorian Calendar and Date were terrible to work with.

felipessca
Автор

Virtual Threads are a game changer for high traffic middleware. Where before to replicate async programming you had to use something like Spring WebFlux... Which is almost like learning a brand new language, its ugly to read and had a crazy steep learning curve... With VT your code is now async with zero code changes assuming your app server supports it.
Its even better than async/await.

mrgatogrande
Автор

JShell and #! JShell scripts are very useful. Java for everything is super

jaredkomoroski
Автор

Modules tend to make fall into great complexities.

I've attempted to use them sometimes, but when it happens that from Spring boot 2 to Spring boot 3, for example, javax.* classes are replaced by jakarta.* classes,
(explain me why: to make developers deserve their paradise?)
then tier APIs around don't allow such change so easily, and it's hours of work to eventually abandon.

sargonnath
Автор

Jpms allows customized jvms with jdeps and jmods, replacing the terrible jre system. Its really nice shipping a tiny jvm for my app to the cloud. Less code in the jvm makes everything a little faster, it really adds up.

jaredkomoroski
Автор

var was a mistake by my perception. I have no use for it, except for final var. My code has very very few re-assignable variables. And I really wished they had introduced val for that, like in Kotlin.

Lowwlander
Автор

Any thoughts on Modules and how to get the code hidden in that module unit tested?

hans_kruse
Автор

String Templates: "It's really good one and I use it all the time"

How do you feel now, pal? 😂

askarkalykov
Автор

Sequenced Collection? Where you put it?

farrukhahmedsid
Автор

Sealed classes replaces the visitor pattern 🎉

jaredkomoroski
Автор

I still don't understand while we can't have a private ffield/property in a record. My use case is like this: a record Person that takes a first name and a last name. I need a person full name and suppose that it's cpu-expensive to calculate the full name from first and last names. In this case, what should I do?

avalagum
Автор

Thanks for the video. The reason I stopped watching Midway through was because of the ridiculous icons. Please just use words next time, if you ever consider doing this again. I think your opinions are good, and everyone makes mistakes sometimes, and this was a mistake.

JonDisnard
join shbcf.ru