Alternative languages have branched off of the language and have succeeded with great buy in. (Clojure, Groovy [I think it's past it's heyday], Scala, Kotlin, etc]. However, java hasn't kept up. Yes, they copied a few nice things. However they're just surface level things. They're still encouraging people to write procedural code and worry about weird things that other frameworks take care of you. (Weird concurrency issues, DSLs, etc)
What I'm talking about:
- Pattern matching (this comes from scala) - They're slowly trying to give you something useful in a switch statement. It's no where near as expressive and extendable as what Scala gives you. (They went from int based, to string based, to some minor features for matching )
- Optional - this really hasn't been workable for those who are constructing functionality. It still feels like a procedural thing that is preventing you from writing if null, it doesn't avoid nesting in Java. In scala this is just apart of the flow of your code.
- Records- My understanding of the introduction of this is that it was a little different from POJOs and it broke external libraries. However, this is been a need since the days before Lombok. Additionally Groovy and Scala had this support.
- var.. ok nice you are now allowing for type inference.. but why not do var and val
A lot of these enhancements have been bandaids on the situation.. not full lets rethink some things and make them better