| > Records, switch expressions, multi line strings and that is only language changes. None of those are features, they were desperately needed shorthands for common java idioms. This is like calling braceless if/for/while statements 'features', when they're purely syntax sugar that has fallen out of favor completely because there's been several major security vulns found in major projects due to their use and development oversight/code review failure (https://nakedsecurity.sophos.com/2014/02/24/anatomy-of-a-got...), to the point where most companies ban writing them. Just off the top of my head: * LINQ. Added to C# in 2007, Java didn't get streams until 2014. * structs/value types, implemented in net framework and net core for 15+ years, but not present in java 17. Some oracle engineers have been working to implement them under project valhalla but it seems to be vaporware at this point after 8+ years of work. * unsigned types, no plans to implement in java (though IIRC it was originally planned as part of valhalla) * async/await At the feature level Java is stuck in the mid 2000s. Nobody wants to do the actual work on keeping it competitive. |
Thank God they didn't shove this crap in. When Loom ships (I believe the next LTS is their target, more or less), JVM will have the same concurrency story as Go does, without blue/green function split like in C#.