(Java 3 refers to theoretical post-Java-7 releases, remember: "Java SE was known as Java 2 Platform Standard Edition or J2SE from version 1.2 until version 1.5." That's why the name "Java 3" was chosen to refer to some future Java versions.)
"Evolve and keep compatibility to old, deprecated APIs or redesign from scratch and loose all compatibility?"
A question that most people would answer in favor to compatibility. But innovation must occur. And it's limited when you don't redesign.
Java has a mature and serious ecosystem. But can it keep up with .NET?
Of course, Java evolves:
Look, Java 5 introduced enums. So what are one million
"final static int"
fields are doing in the JDK? They remain for compatibility reasons.Look, Java 5 introduced generics, but type erasure limits their functionality in favor of being backwards compatible.
URL
'sequals(...)
is broken by design. Its return value depends on the host's network connectivity. It can't be fixed without breaking compatibility.Modern paradigms suggest throwing exceptions, but all the ancient JDK classes (such as File) return
false
when 'something' goes wrong.The Thread class has 6 methods that are deprecated since Java 1.2. They have been deprecated for ten years now and still won't be removed. (see the list of deprecated classes/methods/fields in the JDK)
Java 7 is underway. Lot of new sub-APIs (new NIO, ...) and new language features (project coin) are proposed. But what is the benefit of tons of new language features and sub-APIs, when 95% of the JDK just don't change at all?
So, who of you think that there is a probability that Sun could some day redesign Java to allow real innovation?
And if Sun will not, does Java as we know it have a future?