Wie wir in Java 8, gibt es viele Methoden mit dem Namen ‚von‘, wie zu sehen Stream.of()
, Optional.of()
und viele Bibliotheken wie actorOf
in Akka.
Was bedeutet dieses "von"? Ist es das englische Wort "of" oder eine Abkürzung für so etwas wie "Object Factory"?
Stream.of(1,2,3)
klingt okay,Optional.of(1)
ist aber einfach komisch.actorOf
ist noch seltsamer und sollte wirklich genannt werdencreateActor
.Stream.of(a,b,c)
lautet: Ein Stream bestehend aus a, b und c.Antworten:
Es ist ein englisches Wort, ja. Es wird normalerweise so gewählt, dass der Ausdruck wie eine englische Phrase liest. Zum Beispiel
Stream.of(3, 4)
soll es wie ein "Strom von drei und vier" aussehen, was einer verkürzten Version von "einem Strom, der aus den Zahlen drei und vier besteht" ähnelt.quelle
Wie traditionell, wenn Sie sich Wrapper-Klassen ansehen, enthalten sie alle
valueOf(XXX)
Methoden zum Erstellen einer Instanz der Wrapper-Klasse des angegebenen Wertetyps .Integer.valueOf(int) Double.valueOf(double) Float.valueOf(float)
Java folgt dieser Namenskonvention ab Tag 1. In ähnlicher Weise enthalten die meisten von Java-8 eingeführten Klassen diese
of(...)
Methode stark.Es sind nicht nur
valueOf
oderof
Methoden verfügbar, es gibt nur wenige weitere Methoden, die einem bestimmten Zweck oder Aufgabentyp in verschiedenen Klassen dienen, und sie haben einen am besten geeigneten Namen zugewiesen, der diese Aufgabe darstellt.Integer.parseInt(str), Double.parseDouble(), Date.parse(datestr)
etc.Calendar.get(field), LocalDate.get(TemporalField)
etc.String.format(), SimpleDateFormat.format(), DateTimeFormatter.format()
etc.Diese Namenskonventionen werden in der Java8 DateTime-API häufig verwendet. Schauen Sie sich diese Methodenbenennungskonventionen an
quelle
Dies ist eine gängige Namenskonvention für statische Factory-Methoden .
Joshua Bloch erwähnt Folgendes über das Muster und die damit verbundenen Namenskonventionen in Effective Java (2. Ausgabe) , Punkt 1: Betrachten Sie statische Factory-Methoden anstelle von Konstruktoren (Hervorhebung hinzugefügt):
Wie andere bereits betont haben, bedeutet "von" das englische Wort "von" und ist keine Abkürzung. Einer der Gründe für die Verwendung dieser Konvention besteht darin, leichter herauszufinden, ob eine Klasse eine Factory-Methode bereitstellt, da statische Fabriken in JavaDocs (im Vergleich zu Konstruktoren) nicht in einem separaten Abschnitt angezeigt werden.
Meiner Meinung nach besteht ein zusätzlicher Vorteil bei der Verwendung von statischen Fabriken mit kurzen und beschreibenden Namen darin, dass der Code wie Prosa gelesen wird , was nicht der Fall ist, wenn er mit
new
Konstruktoraufrufen übersät ist .quelle