Gibt es auto
in Java einen Variablentyp wie in C ++?
Ein Beispiel:
for ( auto var : object_array)
std::cout << var << std::endl;
for( auto var : object_array)
var.do_something_that_only_this_particular_obj_can_do();
Ich weiß, dass es in Java eine erweiterte for-Schleife gibt, aber gibt es eine automatische? Wenn nicht, gibt es einen Hack dazu? Ich beziehe mich auf die neue Funktion in C ++ 11
Object
, sodass Sie für einige Operationen verwenden können,Object
wo Sie möchtenauto
.to_string
und nicht das betreffende Objekt , nicht wahr ?Antworten:
Beantwortet, bevor die Frage bearbeitet wurde :
Nein,
auto
in Java gibt es keinen Variablentyp. Die gleiche Schleife kann erreicht werden als:Java verfügt über lokale Variablen, deren Gültigkeitsbereich innerhalb des Blocks liegt, in dem sie definiert wurden. Ähnlich wie C und C ++, aber es gibt kein Auto- oder Register-Schlüsselwort. Der Java-Compiler erlaubt jedoch nicht die Verwendung einer nicht explizit initialisierten lokalen Variablen und gibt einen Kompilierungsfehler aus (im Gegensatz zu C und C ++, wo der Compiler normalerweise nur eine Warnung ausgibt). Mit freundlicher Genehmigung von Wikipedia .
Nein, in Java gibt es keine gängigen Typinferenzen wie in C ++. Es gab eine RFE , diese wurde jedoch als "Wird nicht behoben" geschlossen. Der angegebene Grund war:
quelle
Object
) können jedoch nicht so ausgeführt werden. Dies ist keine wirklich gute Antwort, es funktioniert nur, weil das Beispiel in der Frage schwach ist.auto
in C und vor C ++ 11. Ihre Bearbeitung ist nicht zum Thema.var
seit Java 9 reserviert ist.Könnte sein, dass Java 10 über das
var
Schlüsselwort das hat, was Sie (und ich) wollen .Aus JDK-Verbesserungsvorschlägen 286
Update: Ja, diese Funktion hat es in die Java 10-Version geschafft!
quelle
var
ist kein Schlüsselwort! Aus dem JLS : "var ist kein Schlüsselwort, sondern ein Bezeichner mit besonderer Bedeutung als Typ einer lokalen Variablendeklaration". Im Gegensatz zu Schlüsselwörtern hindert Sie nichts daran, eine Variable oder eine Methode "var" aufzurufen.var
ist in der Tat nicht in der Liste der Schlüsselwörter.Java 7 führt die Diamantsyntax ein
Im Vergleich zu altem Java
Der kritische Leser wird feststellen, dass diese neue Syntax beim Schreiben der for-Schleifen in der ursprünglichen Frage nicht hilfreich ist. Das ist richtig und völlig beabsichtigt, wie es scheint. Siehe die andere Antwort, in der die Fehlerdatenbank von Oracle zitiert wird.
quelle
auto integerBox = new Box<Integer>();
Dies wird normalerweise verwendet, um einen Rückgabewert von Funktionen zu erhalten, die manchmal komplexiert werden können wieHashMap<String, LinkedList<Operation, Set<Integer>>>
In Java 8 können Sie die Lambda-Typinferenz verwenden, um zu vermeiden, dass der Typ deklariert wird. Das Analogon zu den Beispielen des Fragestellers wäre:
Beide können auch mithilfe von Methodenreferenzen vereinfacht werden:
quelle
Kurz gesagt, nein, es gibt keinen automatischen Typ. Wenn Sie jedoch nur den Wert drucken, können Sie den Wert einfach als bezeichnen
Object
.quelle
hashCode
s berechnen oder Klassennamen sammeln oder ... Sie haben die Idee;) Die Liste ist jedoch kurz. Siehe Objektklasse 'Dokumente (Kommentar für Anfänger gedacht, ich bin sicher, Sie wussten es SimonC)Es ist keine reine Java-Lösung. Wenn Sie jedoch eine Bibliothek namens lombok hinzufügen, kann die folgende Magie das
auto
Schlüsselwort in C ++ kompilieren und sehr ähnlich funktionierenquelle