Video: Java für Fortgeschrittene - Multithreading 1 - Erstellen von Threads [GERMAN/DEUTSCH] 2024
Eines der ursprünglichen Designziele für Java war es, die Sprache so einfach wie möglich zu halten. Der Entwickler der Sprache hat einige unnötig komplizierte Funktionen von C ++ übernommen und sie aus dem Fenster geworfen. Das Ergebnis war eine Sprache, die elegant und schlank war. Einige Leute sagten, die Sprache sei zu schlank.
Nach einigen Jahren der Diskussion und des Zankens wurde Java ein bisschen komplizierter. Im Jahr 2004 hatte Java Enum-Typen, erweitert für Loops, statischen Import und einige andere interessante neue Features. Das am meisten diskutierte neue Feature war jedoch die Einführung von Generika.
ArrayList Personen = neue ArrayList ();
Die Verwendung von etwas Ähnlichem war in Java 5 neu. 0. In altem Java schreiben Sie
ArrayList people = new ArrayList ();
In diesen Tagen konnte eine ArrayList fast alles speichern, was man hineinstellen wollte - eine Nummer, einen Account, einen Raum, einen String … irgendetwas. Die ArrayList-Klasse war sehr vielseitig, aber mit dieser Vielseitigkeit kamen einige Kopfschmerzen. Wenn Sie etwas in eine ArrayList einfügen könnten, könnten Sie nicht leicht vorhersagen, was Sie von einer ArrayList erhalten würden.
Insbesondere könnten Sie nicht einfach Code schreiben, der davon ausgeht, dass Sie bestimmte Arten von Werten in der ArrayList gespeichert haben. Hier ein Beispiel:
ArrayList things = new ArrayList (); Dinge. add (neues Konto ()); Konto myAccount = Dinge. erhalte (0); // VERWENDEN SIE DIES NICHT. ES IST SCHLECHTER CODE.
In der dritten Zeile greift der Aufruf von get (0) auf den frühesten Wert in der Things-Sammlung zurück. Der Aufruf von get (0) ist in Ordnung, aber dann versagt der Compiler bei der versuchten Zuweisung zu myAccount. Sie erhalten eine Nachricht in der dritten Zeile, die besagt, dass alles, was Sie von der Liste der Dinge erhalten, nicht in die Variable myAccount eingefügt werden kann.
Sie erhalten diese Meldung, weil der Compiler beim Erreichen der dritten Zeile vergessen hat, dass das in der zweiten Zeile hinzugefügte Objekt vom Typ Konto ist!
Die Einführung von Generics behebt dieses Problem:
ArrayList things = new ArrayList (); Dinge. add (neues Konto ()); Konto myAccount = Dinge. erhalte (0); // VERWENDEN SIE DIESEN CODE INSTEAD. Es ist guter Code.
Das Hinzufügen an zwei Stellen teilt dem Compiler mit, dass Dinge Account-Instanzen speichern - sonst nichts. In der dritten Zeile des vorherigen Codes erhalten Sie also einen Wert aus der Things-Auflistung. Da Dinge nur Account-Objekte speichern, können Sie myAccount auf diesen neuen Wert verweisen lassen.
Java 5. 0 hat Java mit Generics ergänzt. Doch schon bald nach der Geburt von Java 5. 0 merkten Programmierer, wie plump der Code für Generics sein kann.Schließlich können Sie Generika innerhalb von Generika erstellen. Eine ArrayList kann eine Reihe von Arrays enthalten, von denen jedes eine ArrayList sein kann. Sie können also
ArrayListschreiben. Mess = new ArrayList ();
Die ganze Wiederholung in dieser Chaos-Erklärung gibt Programmierern Kopfschmerzen! Um diese Hässlichkeit zu vermeiden, haben Java 7 und spätere Versionen einen Diamant-Operator , . Der Diamantoperator teilt Java mit, dass er alles wahnsinnig komplizierte Material, das Sie in den vorherigen Teil der generischen Deklaration eingefügt haben, wiederverwenden kann.
In diesem Beispiel wird Java angewiesen,
ArraylistChaos = new Arraylist ();
In Java 7 und höher können Sie eine dieser Unordnungdeklarationen schreiben - die ursprüngliche, unangenehme Deklaration mit zwei Vorkommen von ArrayList [] oder die optimierte (nur leicht böse) Deklaration mit dem Diamantoperator und nur einer ArrayList [] Auftreten.
Ja, der optimierte Code ist immer noch kompliziert. Aber ohne die Wiederholung von ArrayList [] ist der optimierte Code weniger mühsam. Der Java 7-Diamant-Operator nimmt Ihnen eine Chance, etwas falsch zu kopieren und einen großen Fehler in Ihrem Code zu haben.