I think having proper sum-types with pattern matching would have also made it a much better language.
https://softwareengineering.stackexchange.com/questions/1495...
Immutable objects often require you to construct a new object to store an updated value and garbage collect the now unused previous object. So a lot of early Java code was written with mutable objects to avoid performance issues.
The Java Bean spec was written in 1997:
https://blog.joda.org/2014/11/the-javabeans-specification.ht...
Aside from immutable instances, it would be nice if 'final' was the default, as well.
But if we're going to critique Java honestly, can't we stick to the language the way it looks today and not the way it looked nearly ten years ago?
Modern Java is quite pleasant to work with. One by one the papercuts and footguns have been fixed.