502 Stimmen

Was ist der Zweck des Diamant-Operators (<>) in Java?

Der Diamant-Operator in Java 7 ermöglicht Code wie folgt:

List list = new LinkedList<>();

In Java 5/6 kann ich jedoch einfach schreiben:

List list = new LinkedList();

Mein Verständnis von Typenlöschung ist, dass diese genau gleich sind. (Die Generika werden sowieso zur Laufzeit entfernt).

Warum überhaupt den Diamanten verwenden? Welche neue Funktionalität / Typensicherheit ermöglicht er? Wenn er keine neue Funktionalität liefert, warum erwähnen sie es dann als Feature? Ist mein Verständnis dieses Konzepts fehlerhaft?

4 Stimmen

Beachten Sie, dass dies kein Problem darstellt, wenn Sie statische Fabrikmethoden verwenden, da Java Typenschlüsseleinschätzung bei Methodenaufrufen durchführt.

0 Stimmen

Wenn Sie die Warnung deaktivieren, ist sie tatsächlich nutzlos... :) wie für mich

4 Stimmen

Es wurde beantwortet, aber es befindet sich auch im Java-Tutorial (etwa in der Mitte der Seite): docs.oracle.com/javase/tutorial/java/generics/…

4voto

allprog Punkte 16212

Alles, was in den anderen Antworten gesagt wurde, ist gültig, aber die Anwendungsfälle sind meiner Meinung nach nicht vollständig gültig. Wenn man sich Guava ansieht und insbesondere die mit Sammlungen zusammenhängenden Dinge, wurde dasselbe mit statischen Methoden gemacht. Zum Beispiel Lists.newArrayList(), das es Ihnen ermöglicht, Folgendes zu schreiben

List namen = Lists.newArrayList();

oder mit statischem Import

import static com.google.common.collect.Lists.*;
...
List namen = newArrayList();
List namen = newArrayList("eins", "zwei", "drei");

Guava hat noch andere sehr leistungsstarke Funktionen wie diese und ich kann tatsächlich nicht viele Verwendungen für den <> finden.

Es wäre nützlicher gewesen, wenn sie sich dafür entschieden hätten, das Verhalten des Bereichsoperators standardmäßig zu machen, d.h. der Typ wird von der linken Seite des Ausdrucks abgeleitet oder wenn der Typ von der linken Seite von der rechten Seite abgeleitet wurde. Letzteres ist das, was in Scala passiert.

2voto

Buhake Sindi Punkte 85274

Der Zweck des Diamantenoperators besteht einfach darin, die Eingabe von Code beim Deklarieren generischer Typen zu reduzieren. Es hat keinerlei Auswirkungen auf die Laufzeit.

Der einzige Unterschied, wenn Sie in Java 5 und 6 angegeben haben,

List list = new ArrayList();

ist, dass Sie @SuppressWarnings("unchecked") für die list angeben müssen (ansonsten erhalten Sie eine Warnung vor einer nicht überprüften Umwandlung). Meiner Ansicht nach soll der Diamantenoperator die Entwicklung einfacher machen. Er hat überhaupt nichts mit der Laufzeitausführung von Generics zu tun.

0 Stimmen

Du musst diese Annotation nicht einmal verwenden. Zumindest in Eclipse kannst du dem Compiler einfach sagen, dich nicht vor diesem zu warnen, und du bist in Ordnung...

0 Stimmen

Es ist besser, die Anmerkung zu haben. Nicht alle Entwickler verwenden Eclipse hier draußen.

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