In Java 8 können Schnittstellen implementierte Methoden, statische Methoden und sogenannte "Standard" -Methoden enthalten (die von den implementierenden Klassen nicht überschrieben werden müssen). Aus meiner (wahrscheinlich naiven) Sicht bestand keine Notwendigkeit, solche Schnittstellen zu verletzen. Schnittstellen waren schon immer ein Vertrag, den Sie erfüllen müssen, und dies ist ein sehr …
Im Java 8- java.util.functionPaket haben wir: Funktion : Nimmt ein Argument und erzeugt ein Ergebnis. Verbraucher : Nimmt ein Argument, produziert nichts. Lieferant : Nimmt kein Argument, produziert ein Ergebnis. ... : Andere Fälle, die Primitive, 2 Argumente usw. behandeln ... Aber ich muss den Fall " nimmt kein Argument, …
Java 8 hat eine völlig neue Bibliothek für Datums- und Uhrzeitangaben im Paket java.time, die für alle sehr willkommen ist, die JodaTime zuvor verwenden mussten oder Probleme damit hatten, eigene Hilfsmethoden für die Datumsverarbeitung zu erstellen. Viele Klassen in diesem Paket stellen Zeitstempel dar und haben Hilfsmethoden getHour(), um Stunden …
Überspringen Methodenverweise den Overhead der Lambda-Hülle? Könnten sie in der Zukunft? Gemäß dem Java-Tutorial zu Methodenreferenzen : Manchmal ... ruft ein Lambda-Ausdruck nur eine vorhandene Methode auf. In diesen Fällen ist es oft klarer, die vorhandene Methode namentlich zu bezeichnen. Mit Methodenreferenzen können Sie dies tun. Sie sind kompakte, leicht …
Ich schätze die neuen Java 8-Funktionen für Lambdas und Standardmethoden-Schnittstellen sehr. Trotzdem langweilen mich geprüfte Ausnahmen. Wenn ich zum Beispiel nur alle sichtbaren Felder eines Objekts auflisten möchte, möchte ich einfach Folgendes schreiben: Arrays.asList(p.getClass().getFields()).forEach( f -> System.out.println(f.get(p)) ); Da die getMethode jedoch möglicherweise eine aktivierte Ausnahme auslöst, die nicht mit …
for (Canvas canvas : list) { } NetBeans schlägt mir vor, "funktionale Operationen" zu verwenden: list.stream().forEach((canvas) -> { }); Aber warum wird das bevorzugt ? Wenn überhaupt, ist es schwieriger zu lesen und zu verstehen. Sie rufen auf stream()und verwenden dann forEach()einen Lambda-Ausdruck mit Parameter canvas. Ich sehe nicht, wie …
Angenommen, ich habe einen Datenstrom von Dingen und möchte diese in der Mitte des Datenstroms "anreichern". peek()Dazu kann ich Folgendes verwenden : streamOfThings.peek(this::thingMutator).forEach(this::someConsumer); Nehmen Sie an, dass das Mutieren der Dinge an dieser Stelle im Code korrekt ist - zum Beispiel das thingMutator Methode das Feld "lastProcessed" möglicherweise auf die …
Erfordert die Einführung der neuen Lambda-Notation (siehe z. B. diesen Artikel ) in Java 8 eine Art Typinferenz? Wenn ja, wie wird sich das neue Typsystem auf die Java-Sprache insgesamt auswirken?
Nehmen Sie die beiden Codebeispiele: if(optional.isPresent()) { //do your thing } if(variable != null) { //do your thing } Soweit ich das beurteilen kann, besteht der offensichtlichste Unterschied darin, dass für das optionale Objekt ein zusätzliches Objekt erstellt werden muss. Viele Menschen haben jedoch schnell begonnen, Optionals einzuführen. Was ist …
Wenn ich die neue Java8-Streams-API verwende, um ein bestimmtes Element in einer Sammlung zu finden, schreibe ich folgenden Code: String theFirstString = myCollection.stream() .findFirst() .get(); Hier warnt IntelliJ, dass get () aufgerufen wird, ohne vorher isPresent () zu überprüfen. Dieser Code: String theFirstString = myCollection.iterator().next(); ... gibt keine Warnung aus. …
Ich frage mich, ob das Messen der bedingten Code-Abdeckung mit aktuellen Java-Tools nicht überholt ist, seit Java 8 verfügbar ist. Mit Java 8 ist Optionalund Streamwir können oft vermeiden Code branches / Loops, die es einfach macht , zu bekommen sehr hohe bedingte Abdeckung ohne Prüfung aller möglichen Ausführungspfade. Vergleichen …
Während ich meine API entwickle, die an keinen Legacy-Code gebunden ist, schreibe ich häufig Methoden, bei denen es sich um reine Streams-Pipeline handelt, die durch das Sammeln der Ergebnisse beendet wird. Wie dieser: ImmutableSet<T> deriveSomethingMeaningfulFromPrivateState() { return myPrivateThingies.stream() .map(this::ownerOfThing) .map(Owner::socialStatus) .filter(SocialStatus::isHeAFineMatey) .collect(MyCustomCollectors.toImmutableSet()); } Die meisten Clients dieser Klasse benötigen normalerweise …
Der folgende Scala-Code funktioniert und kann an eine Java-Methode übergeben werden, die eine Funktion erwartet. Gibt es einen saubereren Weg, dies zu tun? Hier ist mein erster Durchgang: val plusOne = new java.util.function.Function[Int,Int] { override def apply(t:Int):Int = t + 1 override def andThen[V](after:function.Function[_ >: Int, _ <: V]): function.Function[Int, …
Ich entwerfe eine Schnittstelle mit zwei ähnlichen Methoden: public interface ThingComputer { default Thing computeFirstThing() { return computeAllThings().get(0); } default List<Thing> computeAllThings() { return ImmutableList.of(computeFirstThing()); } } Etwa die Hälfte der Implementierungen berechnet immer nur eine Sache, während die andere Hälfte möglicherweise mehr berechnet. Hat dies einen Präzedenzfall in weit …
We use cookies and other tracking technologies to improve your browsing experience on our website,
to show you personalized content and targeted ads, to analyze our website traffic,
and to understand where our visitors are coming from.
By continuing, you consent to our use of cookies and other tracking technologies and
affirm you're at least 16 years old or have consent from a parent or guardian.