Lassen Sie mich eine Perspektive geben, warum wir diese Funktion zur Sprache hinzugefügt haben, obwohl dies eindeutig nicht unbedingt erforderlich war (alle Methodenreferenzen können als Lambdas ausgedrückt werden.)
Beachten Sie, dass es keine richtige Antwort gibt . Jeder, der sagt "Verwenden Sie immer eine Methodenreferenz anstelle eines Lambda" oder "Verwenden Sie immer ein Lambda anstelle einer Methodenreferenz", sollte ignoriert werden.
Diese Frage ist im Geiste sehr ähnlich zu "Wann sollte ich eine benannte Klasse gegen eine anonyme Klasse verwenden"? Und die Antwort ist dieselbe: Wenn Sie es besser lesbar finden . Es gibt sicherlich Fälle, die definitiv der eine oder andere sind, aber es gibt eine Menge Grau in der Mitte, und das Urteilsvermögen muss angewendet werden.
Die Theorie hinter den Methodenreferenzen ist einfach: Namen sind wichtig . Wenn eine Methode einen Namen hat, ist es oft (aber nicht immer!) Klarer und lesbarer, auf sie mit Namen zu verweisen, anstatt durch einen zwingenden Code-Beutel, der sich letztendlich nur umdreht und ihn aufruft.
Die Argumente zur Leistung oder zum Zählen von Zeichen sind meistens rote Heringe, und Sie sollten sie ignorieren. Das Ziel ist das Schreiben von Code, der kristallklar ist, was er tut. Sehr oft (aber nicht immer!) Gewinnen Methodenreferenzen für diese Metrik, daher haben wir sie als Option aufgenommen, um sie in diesen Fällen zu verwenden.
Eine wichtige Überlegung darüber, ob Methodenreferenzen die Absicht klarstellen oder verschleiern, ist, ob aus dem Kontext ersichtlich ist, welche Form die dargestellte Funktion hat. In einigen Fällen (z. B. ist map(Person::getLastName)
aus dem Kontext ziemlich klar, dass eine Funktion erforderlich ist, die eine Sache einer anderen zuordnet, und in solchen Fällen leuchten Methodenreferenzen. In anderen Fällen muss sich der Leser bei Verwendung einer Methodenreferenz fragen, welche Art von Funktion verwendet wird Dies ist ein Warnsignal dafür, dass ein Lambda möglicherweise besser lesbar ist, auch wenn es länger ist.
Schließlich haben wir festgestellt, dass die meisten Leute sich zunächst von Methodenreferenzen abwenden, weil sie sich noch neuer und seltsamer fühlen als Lambdas, und sie daher zunächst "weniger lesbar" finden, aber im Laufe der Zeit, wenn sie sich an die Syntax gewöhnen, Ändern Sie im Allgemeinen ihr Verhalten und tendieren Sie zu Methodenreferenzen, wenn sie können. Seien Sie sich also bewusst, dass Ihre subjektive anfängliche "weniger lesbare" Reaktion mit ziemlicher Sicherheit einen Aspekt der familiären Voreingenommenheit mit sich bringt, und Sie sollten sich die Möglichkeit geben, sich mit beiden vertraut zu machen, bevor Sie eine stilistische Meinung abgeben.