Nehmen Sie Java 8 ein bisschen näher

Nehmen Sie Java 8 ein bisschen näher

Java, eine Programmiersprache von James Gosling im Jahr 1991, sollte ein Programm schreiben, das auf mehreren Betriebssystemen ausgeführt werden kann. Oracle hat nun die Stanze für Java und setzt das Projekt im Namen von OpenJDK fort. Im Laufe der Zeit wurden mehrere neue verbesserte Versionen von Java veröffentlicht, aus denen der aktuelle 1 ist.8 im Volksmund als Java 8 bekannt.

  • Lesen Sie dies => So installieren Sie Java 8 auf Centos, Red Hat & Fedora
  • Lesen Sie dies => So installieren Sie Java 8 auf Ubuntu & Linuxmint

Die Sprache wurde entwickelt, in der diese Eigenschaften einbezogen wurden:

  • Plattformunabhängig- Das Programm nutzt die virtuelle Java -Maschine als Abstraktion und greift nicht direkt auf das Betriebssystem zu. Das macht Java -Programme hoch tragbar.
  • Objekt orientierte Programmierung- Abgesehen von primitiven Datentypen können alle Elemente in Java als Objekte betrachtet werden.
  • Starke Programmiersprache- Ja! Java ist eine stark typische Programmiersprache. Beispielsweise müssen die Arten von verwendeten Variablen vor definiert sein und die Umwandlung in andere Objekte wird ziemlich streng. Dies muss bei einem Programmierer erfolgen.
  • Interpretierte und kompilierte Sprache- Der Java -Quellcode muss in das Bytecode -Format übertragen werden, das nicht von der Zielplattform abhängt. Die Anweisungen werden von der Java Virtual Machine (JVM) interpretiert. Der JVM, der sogenannte Hotspot-Compiler enthält.
  • Automatische Speicherverwaltung- Java ist eine solche Plattform, die erfolgreich die Speicherzuweisung und die Entschichtung zum Erstellen neuer Objekte verwaltet. Das Programm hat keinen direkten Zugriff auf den Speicher. Infolgedessen löscht der Müllsammler automatisch Objekte, auf die kein aktiver Zeiger existiert.

Als Jquery -Entwickler habe ich in den letzten Jahren viel mit Java 8 gearbeitet, sei es neue Anwendungen oder migrierte bestehende. Und ich denke, es ist der richtige Zeitpunkt, um einige der Best Practices zu unterschreiben, die ich ziemlich nützlich gefunden habe. In diesem Blog -Beitrag wird die Streams erläutert, ich.e. Die wichtigsten Vorgänge, die in Ihrem Code ausgeführt werden können. Standardmethoden, Lambdas und Streams und verwenden optional und so weiter, um fehlende Werte darzustellen.

Standardmethoden in Schnittstellen

Die Möglichkeit, Standardmethodenimplementierungen in Schnittstellen anzugeben, wurde von JDK 8 hinzugefügt, damit sich Sammlungen entwickeln konnten, ohne die Kompatibilität rückwärts zu brechen. In den vorherigen Versionen konnten wir ohne alle implementierenden Unterklassen keine Methode hinzufügen. Mit Hilfe von Version 1.8 können wir eine Methode mit dem Standard -Schlüsselwort markieren und den Körper der Methode direkt in der Schnittstelle bereitstellen.
Unten erwähnt ist ein Beispiel für eine Schnittstelle namens Debuggable. Es soll Ihnen zeigen, dass die Reflexions -API verwendet wird, um den Zugriff auf die Felder des Objekts zu erhalten, und eine anständige ToString () -implementierung für das Objekt liefert, das die Felderwerte druckt.

public interface debuggable Standard String debug () StringBuilder sb = new StringBuilder (diese.getClass ().GetName ()); sb.anhängen ("["); Feld [] fields = diese.getClass ().getDeclaredfields (); für (Feld F: Felder) f.setAccessible (wahr); Versuchen Sie SB.anhängen (f.getName () + "=" + f.bekomme das)); sb.anhängen (","); catch (illegalArgumentException | illegalAccessException e) neue runTimeexception (e) werfen; SB.append ("]"); Return SB.toString ();
123456789101112131415161718public interface debuggable Standard String debug () StringBuilder sb = new StringBuilder (diese.getClass ().GetName ()); sb.anhängen ("["); Feld [] fields = diese.getClass ().getDeclaredfields (); für (Feld F: Felder) f.setAccessible (wahr); Versuchen Sie SB.anhängen (f.getName () + "=" + f.bekomme das)); sb.anhängen (","); catch (illegalArgumentException | illegalAccessException e) neue runTimeexception (e) werfen; SB.append ("]"); Return SB.toString ();

Lambdas in Streams

Leider wurde Java bis jetzt als geeignete Programmiersprache für funktionale Programmierechniken angesehen. Der einzige Grund war, dass die Funktionen nicht die ersten Bürger in der Sprache waren. In der Tat gab es keine ordentliche und akzeptierte Möglichkeit, einen Codeblock mit einem Namen zu verweisen und ihn herumzugeben. Infolgedessen bringt Lambdas eine drastische Änderung. Heutzutage können Methodenreferenzen zum Guten oder Schlechten verwendet werden, um auf eine bestimmte Methode zu verweisen, die Funktionen in Variablen zuzuweisen, sie herumzugeben und alle Vorteile zu genießen, die das funktionale Programmierparadigma Angebote bietet.
Die Grundlagen sind ziemlich einfach, eine Reihe von Schnittstellen werden erstellt. Zum Beispiel:

// dauert lange, gibt eine String -Funktion f = l -> l zurück.toString (); // nimmt nichts gibt Ihnen Threads Lieferant S = Thread :: CurrentThread; // nimmt eine Zeichenfolge als Parameter Verbraucher c = System.out :: println;
12345678// dauert lange, gibt eine Stringfunktion zurück f = l -> l.toString (); // nimmt nichts gibt Ihnen ThreadsSupplier S = Thread :: CurrentThread; // nimmt eine Zeichenfolge als Parameter Verbraucher c = System.out :: println;

Die hier erwähnte Einschränkung ist der Code, der zum Verwalten verwendet wird, wenn Sie anonyme Funktionen über eine bestimmte Schwelle wachsen lassen. Der Code gibt den Datenfluss an. Alles, was Sie tun müssen.

Kurzgesagt

Denken Sie bei der Arbeit mit Streams immer daran, dass Sie die im Stream enthaltenen Werte mit den Funktionen, die Sie beispielsweise mit der Lambda -Syntax bereitstellen, transformieren müssen. Ein paar Imbissbuden:

  • Wenn der Code das Framework für den Datenfluss, in den Sie Ihre Funktionen anschließen, nicht angeben, sollten Sie in Betracht gezogen werden, um Lambdas zu vermeiden. Eine richtige Klasse könnte lesbarer sein.
  • Wenn Ihr Lambda über 3 Codezeilen wächst - teilen.
  • Weisen Sie den Feldern der Objekte keine Lambdas und Funktionen zu. Lambdas repräsentieren Funktionen und diese werden am besten rein serviert.