Frage

Da diese Frage ist zurück, um vier Stimmen der Nähe, ich werde versuchen, wieder zu Fragen, ein schmaler Frage, hoffentlich wird die community mehr anzeigen günstig.

Die spezifischen design-Entscheidungen in Java dokumentiert sind, zu tun die Weise, die Sie nicht denn das war der am günstigsten gelegene design-Entscheidung, sondern weil es notwendig war, zur Unterstützung der Abwärtskompatibilität.

Der offensichtliche Fall ist Generika, wo kann man nicht erkennen, den type-parameter zur Laufzeit.(So dass Sie nicht tun können:

 public void addEmptyMember(List<?> someList) {
      if (someList instanceof List<String>) {
            ((List<String>) someList).add("");
      }
 }

Was andere solche Beispiele existieren in der design-Sprache und die standard-API?

War es hilfreich?

Lösung

Da diese Frage nicht mit einem einzigen richtigen Antwort, ich bin mir nicht sicher, ob es besser ergehen als Ihrer anderen Frage.

Drei Funktionen, die ich denken kann (zusätzlich zu den Allgemeinen Löschung, die Sie bereits erwähnt haben), dass Kompromisse gemacht, im Namen der Abwärtskompatibilität wurden die neuen for-Schleife syntax, varargs, und autoboxing.

Die neue for-Schleife syntax wahrscheinlich gelesen haben sollte for (item in List), aber das hätte erforderlich machen in in einem reservierten Wort.Würde dies verursacht zahlreiche rückwärts Kompatibilität Probleme, nicht zuletzt die Tatsache, dass System.in müsste umbenannt werden.

varargs und autoboxing beiden Hinzugefügt, die Möglichkeiten der Mehrdeutigkeit.Zum Beispiel, wenn Sie übergeben ein array von Objekten für eine Methode, die akzeptiert Object... bedeutet das, dass das array übergeben werden sollen, als vararg-array oder als ein element der vararg-array?Dies wird noch komplizierter, wenn es überlast.Autoboxing hat ähnliche Mehrdeutigkeit Probleme mit überlastung.Die Lösung, um diese beiden Probleme zu machen, war es eine Regel, die beim auflösen von Methodenaufrufen werden Sie zunächst behoben, mit der pre-1.5-Regeln (sprich:kein autoboxing, und Object... behandelt wird, als Object[]).Nur wenn die Methode aufgerufen wird, kann nicht gelöst werden mit der pre-1.5-Regeln sind die neuen 1,5-Regeln betrachtet.

Andere Tipps

Es gibt viele Beispiele in der standard-Bibliothek

  • java.awt.Farbe hat die gleichen Konstanten mit groß-und Kleinschreibung Namen
  • Alle die veralteten Methoden in java.util.Datum der Einführung von java.util.Kalender - was für ein Durcheinander!!
  • java.util.Die Aufzählung noch verwendet werden, wo java.util.Iterator könnte ersetzen es
  • Klassen in Schwung, übernehmen Vektoren als Argumente aber hätte Unterstützung für java.util.Sammlung

Ein weiteres würden alle Klassen und Methoden, die veraltet sind für mehrere Versionen von jetzt, aber will einfach nicht Weggehen.Am bekanntesten sind die verschiedenen Thread-Methoden veraltet sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top