Inhaltsverzeichnis
Was sind Erweiterungsmethoden?
Traditionelle Schreibmethode:
Verwenden Sie die Stream-Schreibmethode:
So implementieren Sie Erweiterungsmethoden in Java.
Vorbereitungsbedingungen
Erweiterungsmethoden schreiben
Heim Java javaLernprogramm Was sind die fehlenden Funktionserweiterungsmethoden von Java?

Was sind die fehlenden Funktionserweiterungsmethoden von Java?

May 20, 2023 pm 04:58 PM
java

    Was sind Erweiterungsmethoden?

    Eine Erweiterungsmethode ist die Möglichkeit, Methoden direkt zu einem vorhandenen Typ hinzuzufügen, ohne einen neuen abgeleiteten Typ erstellen, neu kompilieren oder den vorhandenen Typ anderweitig ändern zu müssen. Beim Aufruf einer Erweiterungsmethode gibt es keinen offensichtlichen Unterschied zum Aufruf der tatsächlich im Typ definierten Methode.

    Warum Erweiterungsmethoden benötigt werden

    Erwägen Sie die Implementierung der folgenden Funktion: Nachdem Sie eine Zeichenfolge mit mehreren Produkt-IDs aus Redis entnommen haben (jede Produkt-ID ist durch ein Komma getrennt), deduplizieren Sie zunächst die Produkt-ID (und können die Elemente verwalten). Reihenfolge) und verwenden Sie abschließend Kommas, um die Produkt-IDs zu verbinden.

    Traditionelle Schreibmethode:

    Verwenden Sie die Stream-Schreibmethode:

    Angenommen, Erweiterungsmethoden können in Java implementiert werden, und wir fügen die Erweiterungsmethode toList für das Array hinzu (verwandeln Sie das Array in List) und fügen die Erweiterungsmethode toSet für hinzu List (verwandeln Sie List in For LinkedHashSet), wurde der Collection die Erweiterungsmethode join hinzugefügt (um die String-Formen von Elementen in der Collection mithilfe des angegebenen Connectors zu verbinden), dann können wir Code wie diesen schreiben:

    Ich glaube An dieser Stelle wissen Sie bereits, warum Sie Erweiterungsmethoden benötigen. Antwort:

    Sie können die vorhandene Klassenbibliothek direkt erweitern, anstatt Werkzeugklassen zu verwenden.

    Im Vergleich zur Verwendung von Werkzeugklassen ist es reibungsloser und komfortabler, Code mit der Methode zu schreiben Geben Sie sich selbst ein

    Der Code ist einfacher zu lesen, da es sich um Kettenaufrufe handelt, anstatt statische Methoden-Nesting-Puppen zu verwenden.

    So implementieren Sie Erweiterungsmethoden in Java.

    Fragen wir zunächst das kürzlich beliebte ChatGPT:

    Was sind die fehlenden Funktionserweiterungsmethoden von Java?

    Die Ansicht von ChatGPT ist dies In Java werden Erweiterungsmethoden durch die statische Methode der bereitgestellten Toolklasse implementiert. Als nächstes werde ich eine brandneue schwarze Technologie vorstellen:

    Manifold

    Vorbereitungsbedingungen

    Manifold und Lombok funktionieren ähnlich, beide werden zur Kompilierungszeit durch den Annotation-Prozessor verarbeitet. Um Manifold effektiv nutzen zu können, müssen Sie das Manifold IDEA-Plugin in IDEA installieren

    und dann annotationProcessorPaths zum Maven-Compiler-Plugin des Projekts pom hinzufügen:

    Wenn Lombok in Ihrem Projekt verwendet wird, müssen Sie dies tun Lombok zur Annotation hinzufügenProcessorPaths:

    Erweiterungsmethoden schreiben

    Im JDK verwendet die Split-Methode von String eine Zeichenfolge als Parameter, nämlich String[] split(String). Fügen wir nun eine Erweiterungsmethode String[] split(char) zu String: Split by gegebene Zeichen hinzu.

    Schreiben Sie Erweiterungsmethoden basierend auf Manifold:

    Sie können statische Methoden finden, die im Wesentlichen Werkzeugklassen sind, aber es gibt einige Anforderungen:

    Werkzeugklassen müssen die @Extension-Annotation von Manifold verwenden

    In statischen Methoden Parameter des Zieltyps sind erforderlich. Verwenden Sie die Annotation „@This“. Der Paketname, in dem sich die Tool-Klasse befindet, muss mit Erweiterungen enden. Der vollständig qualifizierte Klassenname des Zieltyps ist erforderlich. Schüler, die C# verwendet haben, werden wahrscheinlich wissentlich lächeln. Erweiterungsmethode.

    In Bezug auf Punkt 3 besteht der Grund für diese Anforderung darin, dass Manifold hofft, schnell Erweiterungsmethoden im Projekt zu finden, das Scannen aller Klassen im Projekt durch Annotationen zu vermeiden und die Verarbeitungseffizienz zu verbessern.

    Mit der Möglichkeit, Methoden zu erweitern, können wir es jetzt so nennen:

    Erstaunlich! Und Sie können feststellen, dass System.out.println(numStrs.toString()) tatsächlich die Zeichenfolgenform des Array-Objekts ausgibt – nicht die Adresse des Array-Objekts. Durchsuchen Sie die dekompilierte App.class und stellen Sie fest, dass der Erweiterungsmethodenaufruf durch einen statischen Methodenaufruf

    ersetzt wurde und die toString-Methode des Arrays die von Manifold für das Array ManArrayExt.toString(@This Object) definierte Erweiterungsmethode verwendet array):

    Was sind die fehlenden Funktionserweiterungsmethoden von Java?

    [Ljava.lang.String;@511d50c0 So etwas in der Art, Auf Wiedersehen, wir sehen uns nie wieder~

    Was sind die fehlenden Funktionserweiterungsmethoden von Java?Da der Erweiterungsmethodenaufruf zur Kompilierungszeit durch einen statischen Methodenaufruf ersetzt wird, ist die Erweiterungsmethode von Manifold Selbst wenn das Objekt, das die Methode aufruft, null ist, gibt es kein Problem, da der verarbeitete Code null als Parameter an die entsprechende statische Methode übergibt. Zum Beispiel, um die Sammlung zu erweitern:

    Dann beim Aufruf:

    java.lang.NullPointerException, Goodbye, never see you again~

    Array-Erweiterungsmethode

    Wir sehen, dass List so geschrieben ist: @Self wird verwendet, um anzugeben, welchen Typ der annotierte Wert haben soll. Wenn es sich um @Self handelt, also @Self(false), bedeutet dies den annotierten Wert und Der Wert der @This-Annotation ist vom gleichen Typ; @Self(true) gibt den Typ der Elemente im Array an.

    Für Objektarrays können wir sehen, dass die toList-Methode die entsprechende Liste zurückgibt (T ist der Typ des Array-Elements):

    Was sind die fehlenden Funktionserweiterungsmethoden von Java?

    Wenn es sich jedoch um ein Array vom primitiven Typ handelt, lautet der von IDEA angegebene Rückgabewert:

    Was sind die fehlenden Funktionserweiterungsmethoden von Java?

    Aber ich verwende Java, um eine so tolle Funktion wie List zu haben. Man kann also nur native Typen verwenden, um diesen Rückgabewert zu erhalten bald veröffentlicht werden.

    In verschiedenen Projekten sehen wir oft, dass jeder zuerst ein Objekt in Optional verpackt und dann einen Filter, eine Zuordnung usw. durchführt. Durch die Typzuordnung von @Self können Sie Object wie folgt eine sehr praktische Methode hinzufügen: Was sind die fehlenden Funktionserweiterungsmethoden von Java?

    Dann verfügt jedes Objekt über die Methode asOpt().

    Verglichen mit der unnatürlichen Verpackung, die zuvor durchgeführt werden musste:

    Sie können jetzt optional natürlich verwenden:

    Natürlich ist Object die übergeordnete Klasse aller Klassen, Sie müssen immer noch sorgfältig überlegen .

    Erweiterte statische Methoden

    Wir alle wissen, dass Java9 Factory-Methoden zu Sammlungen hinzufügt:

    Ist das nicht verlockend? Denn wenn Sie Java 9 und höher nicht verwenden (Java 8: Zeigen Sie mir einfach Ihren Ausweis), müssen Sie eine Bibliothek wie Guava verwenden. Allerdings ist ImmutableList.of nicht so gut wie List.of .

    Es spielt keine Rolle, sagte Manifold: „Es spielt keine Rolle, ich werde Maßnahmen ergreifen.“ Das Erweitern statischer Methoden basierend auf Manifold besteht darin, @Extension zur statischen Methode der Erweiterungsklasse hinzuzufügen:

    Dann können Sie sich dazu verleiten, eine Version nach Java8 zu verwenden – Sie können tun und lassen, was Sie wollen, ich verwende Java8.

    Übrigens, da Object die übergeordnete Klasse aller Klassen ist, bedeutet das Hinzufügen einer statischen Erweiterungsmethode zu Object, dass Sie überall direkt auf diese statische Methode zugreifen können, ohne importieren zu müssen – Herzlichen Glückwunsch, Sie haben die „Top-Funktionen“ freigeschaltet. .

    Das obige ist der detaillierte Inhalt vonWas sind die fehlenden Funktionserweiterungsmethoden von Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

    Heiße KI -Werkzeuge

    Undresser.AI Undress

    Undresser.AI Undress

    KI-gestützte App zum Erstellen realistischer Aktfotos

    AI Clothes Remover

    AI Clothes Remover

    Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    AI Hentai Generator

    AI Hentai Generator

    Erstellen Sie kostenlos Ai Hentai.

    Heißer Artikel

    R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
    3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Beste grafische Einstellungen
    3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
    3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25: Wie man alles in Myrise freischaltet
    3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

    Heiße Werkzeuge

    Notepad++7.3.1

    Notepad++7.3.1

    Einfach zu bedienender und kostenloser Code-Editor

    SublimeText3 chinesische Version

    SublimeText3 chinesische Version

    Chinesische Version, sehr einfach zu bedienen

    Senden Sie Studio 13.0.1

    Senden Sie Studio 13.0.1

    Leistungsstarke integrierte PHP-Entwicklungsumgebung

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    SublimeText3 Mac-Version

    SublimeText3 Mac-Version

    Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

    Quadratwurzel in Java Quadratwurzel in Java Aug 30, 2024 pm 04:26 PM

    Leitfaden zur Quadratwurzel in Java. Hier diskutieren wir anhand eines Beispiels und seiner Code-Implementierung, wie Quadratwurzel in Java funktioniert.

    Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

    Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

    Armstrong-Zahl in Java Armstrong-Zahl in Java Aug 30, 2024 pm 04:26 PM

    Leitfaden zur Armstrong-Zahl in Java. Hier besprechen wir eine Einführung in die Armstrong-Zahl in Java zusammen mit einem Teil des Codes.

    Zufallszahlengenerator in Java Zufallszahlengenerator in Java Aug 30, 2024 pm 04:27 PM

    Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

    Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

    Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

    Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

    Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

    Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

    In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

    Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

    Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

    See all articles