3 Stimmen

Java: Wie behandelt man generische, heterogene Container?

Beim Umgang mit heterogenen Containern (z. B. Datenbank-Cursor mit Strings, Ints usw.) stellt sich die Frage, was (und warum ) ist der bessere Ansatz:

Vector<?> 

または

Vector<Object>

Sie können Vector durch jede andere Sammlung ersetzen, das ist nur ein Beispiel.

6voto

Nathan Hughes Punkte 90344

Ich bin mir nicht ganz sicher, was Sie hier vergleichen. Versuchen Sie, einen Vektor zu erstellen wie

    java.util.Vector<?> v = new java.util.Vector<?>();

erhält einen Fehler, Cannot instantiate the type Vector<?>

Wenn Sie <?> in einer Parameterliste (ohne Verwendung des super-Schlüsselworts) bedeutet, dass Sie nichts in die Sammlung einfügen können. Wenn Sie das <Object> dann können Sie Dinge einfügen und entfernen.

5voto

John B Punkte 31552

Verwenden. Vector<Object> . En ? sollte verwendet werden, wenn Sie Code schreiben, der den generischen Typ der Sammlung nicht kennt. Sie können nicht eine new Vector<?> warum sollte man sie also als solche betrachten. Sie wissen, dass Sie eine Sammlung wollen, in der alle Object also erklären Sie es als solches.

3voto

Tom Anderson Punkte 44661

Vector<Object> ist ein heterogener Container.

Vector<?> ist ein homogener Behälter unbekannter Art.

0voto

Fred Punkte 4588

Collection<?> ist der Supertyp für alle Arten von Collection einschließlich Collection<?>

Verwendung von Collection<?> ermöglicht es Ihnen, den Inhalt der Sammlung zu erhalten, der immer mindestens ein Objekt sein wird.

Aber wie Nathan sagte, mit Collection<?> erlaubt es Ihnen nicht, Elemente hinzuzufügen oder zu entfernen. Denn jeder Parameter, der zum Hinzufügen oder Entfernen übergeben wird, müsste ein Subtyp dieses unbekannten Typs sein ( <?> ). Da wir nicht wissen, welcher Typ das ist, können wir nichts übergeben. Die einzige Ausnahme ist null, das ein Mitglied jedes Typs ist.

Wenn Sie also nur den Inhalt der Datenbank abfragen wollen Collection Sie können den Typ Wilcard verwenden, aber wenn Sie einige Elemente hinzufügen/entfernen möchten, müssen Sie Collection<Object> .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X