Since this thread contains a lot of comments about Java's ergnomics and speed of innovation, it might be interesting what has changed in the last years:
It is pretty impressive how Java keeps up to date over decades! I think in the long run it is very wise to be conservative over new language features. For example the work von "green threads" (project Loom) is a really good, fundamental approach with backwards compatiblity and there are some voices on the web thinking that such an approach is more clever then introducing "async" to the language (C#, Python, etc). I really appreciate how careful the engineering is and how they don't shy away from putting years into some topics.
https://www.baeldung.com/new-java-9, https://www.baeldung.com/java-10-overview, https://www.baeldung.com/java-11-new-features, https://www.baeldung.com/java-12-new-features, https://www.baeldung.com/java-13-new-features, https://www.baeldung.com/java-14-new-features, https://www.baeldung.com/java-15-new, https://www.baeldung.com/java-16-new-features, https://www.baeldung.com/java-17-new-features
It is pretty impressive how Java keeps up to date over decades! I think in the long run it is very wise to be conservative over new language features. For example the work von "green threads" (project Loom) is a really good, fundamental approach with backwards compatiblity and there are some voices on the web thinking that such an approach is more clever then introducing "async" to the language (C#, Python, etc). I really appreciate how careful the engineering is and how they don't shy away from putting years into some topics.