Einige der "Ist die Java-API schlecht?" wird im Buch Effective Java behandelt.
Einige Teile der API, wie java.util.Date, sind eindeutig schlecht konzipiert (fast alle Methoden sind seit JDK 1.1 veraltet).
Es gibt auch andere Dinge, wie das Fehlen von Schnittstellen bei einigen JDK 1.0-Klassen (was passierte, da es zum Zeitpunkt der Erstellung noch keine Schnittstellen gab (Schnittstellen wurden vor 1.0 hinzugefügt, aber nach 0.0).
Einige Dinge wurden nicht "richtig" gemacht, weil die Konvention nach JDK 1.1 eine Reihe von Änderungen in der AWT aufgrund von JavaBeans und den verwendeten Benennungskonventionen brachte).
Es gab auch einige Dinge, die vor Sprachänderungen wie enums und Generika nicht möglich waren.
Ein Großteil der API ist gut. Einige Teile sind schlecht. Die frühen Komponenten in JDK 1.0 wurden eindeutig für HotJava (einen reinen Java-Webbrowser) geschrieben und waren nicht wirklich für den allgemeinen Gebrauch durchdacht.
Es ist sicher zu sagen, dass je älter die API ist, desto "schlechter" ist sie. Neuere APIs werden mit dem Wissen darüber entworfen, was zuvor kam. Das gilt auch für Sprachen - Java ist (je nach Meinung) besser als C++. C++ ist (je nach Meinung) besser als C, usw..