First, let's get one thing straight. I actually think that Java rules
Nevertheless, there are some shortcomings that I dislike about it, which I think deserve to be covered in this node
Understandably, the Java language was a compromise between new features and existing developer skills at the time of its introduction. To avoid alienating the developers, language designers were afraid to drift away from the familiar ground too much.
The following features are generally missed from Java language:
- Design-by-contract (DBC), as in Eiffel – this would provide more support for developing robust software,
- Multiple inheritance, as in Eiffel – there are solutions that solve the “diamond problem” and others elegantly,
- Automatic delegation or a better event notification mechanism, as in C# (“C Sharp” – a programming language designed by Microsoft for its .Net platform) - simply “syntactic sugar” for the observer design pattern,
- Language support for properties, as in C# or Delphi – “syntactic sugar” to avoid unnecessary trivial getter and setter methods,
- Copy-by-value and input/output/both method parameters, as in C# or Ada – this would provide more support for developing robust software,
- Default parameter values and providing parameters by name, as in Python.
Speaking of the Java platform, some of the Java APIs have not been an all-in-all success:
- Applets have stayed as niche players, undermined by the browser wars and lack of Microsoft support in their Internet Explorer browser.
- AWT GUI toolkit has failed architecturally in its event distribution model and has been since replaced by Swing, but…
- Swing has been bogged down by memory leaks and general performance problems, therefore causing an overall…
- Client-side failure – no “killer-apps” written in Java have yet emerged on the desktop.
- The EJB API is still undergoing major changes, mostly in respect to Entity Beans and composite objects. The EJB 1.0 specification lacked needed functionality, while the EJB 2.0 specification is presently in community review state, with multiple concerns still open.
- Some other foundation classes (e.g., date manipulation) have not turned out elegantly, having naming inconsistencies and many deprecated methods.
If I'm not right on any of this - please let me know so I can correct it.
Please also note that I am nit-picking on some of the items - you cannot expect someone to get everything right.
It is much easier to critique than to praise - and, seriously, Java deserves much more praise than critique.
Even if, judging from this node single-handedly it doesn't seem that way.