Java is known for overly engineered APIs
I haven't been doing a lot of Java programming as of late, but, I seem to recall one of my favorite APIs/classes was XMLGregorianCalendar. It didn't have a constructor. You had to use a separate factory to create it. And on top of that the factory method threw a checked exception that occurred if there was a problem with the configuration file. That should have been an unchecked exception because there would be no way to recover from it. Also, does a Gregorian calendar class really need to be pluggable? Never mind, I have no idea why that class should be needed to begin with. It should just use a standard Date class. It seemed ridiculous to me. Java was already starting to have issues keeping up with .NET before Oracle. LINQ for example left Java in the dust. Once Oracle bought out Sun, it hasn't gotten better. I wish that Java EE were more successful than it is. For example JavaServer Faces. It had it's own issues, but, eventually they were mostly sorted out. However, no one seems to use standard anything in the Java world. It is just a potpourri of different open source frameworks/libraries where one developer is doing one thing and another is doing something else. A few other lame things about Java include longstanding issues like memory leaks in commonly used software such as Tomcat. I thought it was ridiculous that that was never fixed. And more recently, Oracle released Java 9. And their own IDE, NetBeans doesn't even support it. It is pathetic.