Top Ten „Was man an Java verbessern könnte“


Kurz vor dem langersehnten Java 8-Release drängt sich mir die Frage auf, was mich an Java am meisten stört, oder anders gesagt, was man (auch mit den modernen Sprachmitteln) unbedingt besser machen sollte, wenn man nicht auf Kompatibilität achten müsste. Dabei will ich gar nicht von gravierenden Neuerungen reden, die den Charakter der Sprache komplett ändern würden, sondern von den kleinen, vermeidbaren Hässlichkeiten. Natürlich ist das ein ziemlich kontroverses Thema, und jeder wird da seine eigene Liste haben…

  1. Unnötige Schlüsselwörter vermeiden: volatile, transient und strictfp könnten Annotationen sein, instanceof könnte zu einer Methode von Object werden
  2. Arrays keine Extrawurst mehr braten: Ein Array könnte sich syntaktisch an den Collections orientieren (auch wenn es vom Compiler „hintenherum“ anders behandelt wird) und müsste bei Zuweisungen invariant sein, um ArrayStoreExceptions zu vermeiden.
  3. Einen „Selbsttyp“ einführen: So wie this für das aktuelle Objekt steht, müsste ein generischer Typ This für die aktuelle Klasse stehen. Damit sind Tricksereien wie z.B. in der Typsignatur der Enum-Klasse nicht mehr nötig. Elternklassen und Interfaces können so problemlos Methoden definieren, die die konkrete Klasse als Rückgabewert besitzen.
  4. Primitive als generische Typen erlauben: Entsprechender Code kann automatisch generiert werden, ähnlich wie in Scala mit @specialized.
  5. Mehr Sicherheit gegen Nullpointer-Exceptions: Verbindliche, geprüfte Annotationen für Argumente, die null sein können.
  6. Object entrümpeln: Was soll die clone()-Methode in Object? Muss jedes Object als Lock dienen können, wozu soll man notify() und wait() mitschleppen? Wieso equals(), wenn nicht jede Klasse wirklich „vergleichbar“ ist? Wieso hashCode(), wenn viele Klassen nicht als Schlüssel einer Map taugen? Weg damit, in eigene Interfaces.
  7. Vernüftiges Serializable: Ein bisschen mehr Unterstützung wäre nicht schlecht, etwa über Annotationen (z.B. um einen „Konverter“ anzugeben, der eigentlich nicht-serialisierbare Member doch serialisieren kann).
  8. Unveränderliche Collections: Nein, nicht das, was Collections.unmodifiableList und so liefern, sondern immutable Collections, die ein neues Objekt liefern, wenn z.B. ein Element hinzugefügt oder gelöscht wird.
  9. String zu einem Iterable machen: Es ist völlig unverständlich, warum man nicht mit einer erweiterten For-Schleife über einen String iterieren kann.
  10. Vergleiche verbessern: Comparable streichen, Comparator.compare() ein Enum zurückgeben lassen, statt dafür int zu missbrauchen.

Wie sieht eure Liste aus?

Advertisements
Verschlagwortet mit

2 Gedanken zu “Top Ten „Was man an Java verbessern könnte“

  1. Schön wäre auch eine Möglichkeit, einen regulären Ausdruck anders anzugeben als in Stringform. Zum Beispiel: ´\\\\´ (matcht 2 backslashs, in Java „\\\\\\\\\“)

    Zum einen würde das fehlerträchtige Verdoppeln der Backslashs entfallen, was die Lesbarkeit drastisch erhöht. Zum anderen, und das wäre noch viel besser, könnte der Regex schon zur Compilezeit geprüft werden, und illegale (d.h. solche die zur Laufzeit Patternsyntaxexception werfen werden) könnten zurückgewiesen werden. Last but not least könnten die Regex-Literale beim Laden der enthaltenden Klasse einmalig compiliert werden (wie viele String.split oder String.replaceAll stehen in inneren Schleifen?)

    (Muß ich erwähnen, daß all dies in Frege realisiert ist …..)

    Zur Rückwärtskompatibilität: Methoden, die Strings akzeptieren, wo eigentlich Regex gemeint ist wie String.split(String) müßten deprecated werden, und gleichartige mit Regex geschaffen werden, wo nötig.

    Also kein großer Deal.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s