In einigen von mir geschriebenen Schnittstellen möchte ich generische Typparameter mit mehr als einem Zeichen benennen, um den Code besser lesbar zu machen.
Etwas wie....
Map<Key,Value>
An Stelle von...
Map<K,V>
Aber wenn es um Methoden geht, sehen die Typparameter wie Java-Klassen aus, was ebenfalls verwirrend ist.
public void put(Key key, Value value)
Dies scheint, als wären Schlüssel und Wert Klassen. Ich fand oder dachte an einige Notationen, aber nichts wie eine Konvention von Sun oder eine allgemeine Best Practice.
Alternativen, die ich erraten oder gefunden habe ...
Map<KEY,VALUE>
Map<TKey,TValue>
java
generics
naming-conventions
chaper29
quelle
quelle
Antworten:
Oracle empfiehlt unter Java Tutorials> Generics> Generic Types Folgendes :
Ich würde mich daran halten, um die Verwirrung zwischen den Entwicklern und möglichen Betreuern zu vermeiden.
quelle
R
für das Ergebnis undA
für den Akkumulator verwendet.Element
inList<Element>
ein parametrisierter Typ oder eine Klasse ist?BiFunction<T, U, R>
dieser Konvention folgen. Wenn es so wäre, wäre es soBiFunction<T, S, R>
.Anhängen
Type
Eine gute Diskussion finden Sie in den Kommentaren auf der DZone-Seite, Namenskonventionen für parametrisierte Typen .
Siehe den Kommentar von Erwin Müller. Sein Vorschlag macht für mich ganz offensichtlich Sinn: Fügen Sie das Wort hinzu
Type
.Nennen Sie einen Apfel einen Apfel, ein Auto ein Auto. Der fragliche Name ist der Name eines Datentyps, oder? (In OOP definiert eine Klasse im Wesentlichen einen neuen Datentyp.) Nennen Sie ihn also "Typ".
Muellers Beispiel aus dem Artikel des Originalposts:
Anhängen
T
Eine doppelte Frage liefert diese Antwort von Andy Thomas. Beachten Sie den Auszug aus dem Google-Styleguide, der vorschlägt, dass ein mehrstelliger Typname in einem einzigen Großbuchstaben enden sollte
T
.quelle
Der Grund, warum die offizielle Namenskonvention die Verwendung eines einzelnen Buchstabens empfiehlt, ist folgender:
Ich denke, mit modernen IDEs ist dieser Grund nicht mehr gültig, wie z. IntelliJ Idea zeigt generische Typparameter mit anderen Farben als reguläre Klassen an.
Code mit generischem Typ, wie in IntelliJ Idea 2016.1 angezeigt
Aufgrund dieser Unterscheidung verwende ich für meine generischen Typen längere beschreibende Namen mit derselben Konvention wie reguläre Typen. Ich vermeide das Hinzufügen von Präfixen und Suffixen wie T oder Type, da ich sie als unnötiges Rauschen betrachte und nicht mehr zur visuellen Unterscheidung generischer Typen benötige.
Hinweis: Da ich kein Benutzer von Eclipse oder Netbeans bin, weiß ich nicht, ob sie eine ähnliche Funktion bieten.
quelle
Ja, Sie können mehrstellige Namen für Typvariablen verwenden, sofern diese klar von Klassennamen unterschieden werden.
Dies unterscheidet sich von der von Sun mit der Einführung von Generika im Jahr 2004 vorgeschlagenen Konvention. Allerdings:
Lesbarkeit
Die Lesbarkeit ist gut.
Vergleichen Sie:
zu:
oder mit der Mehrzeichenkonvention von Google:
Google-Stil
Der Google Java Style Guide ermöglicht sowohl Einzelbuchstaben als auch Klassen mit mehreren Zeichen, die mit T enden.
Probleme
Einzelzeichennamen sind nicht die einzige Möglichkeit, Typparameter von Klassennamen zu unterscheiden, wie wir oben gesehen haben.
Es ist wahr, dass die
@param
JavaDoc-Elemente eine längere Beschreibung liefern können. Es stimmt aber auch, dass die JavaDocs nicht unbedingt sichtbar sind. (Zum Beispiel gibt es in Eclipse eine Inhaltshilfe, die die Namen der Typparameter anzeigt.)Viele der ursprünglichen Konventionen von Sun werden in der Java-Programmierung nahezu universell befolgt.
Diese spezielle Konvention ist es jedoch nicht.
Die beste Wahl unter konkurrierenden Konventionen ist Ansichtssache. Die Konsequenzen der Wahl einer anderen Konvention als der von Oracle sind in diesem Fall gering. Sie und Ihr Team können eine Konvention auswählen, die Ihren Anforderungen am besten entspricht.
quelle
Sie können javadoc verwenden, um zumindest Benutzern Ihrer generischen Klasse einen Hinweis zu geben. Ich mag es immer noch nicht (ich stimme @ chaper29 zu), aber die Dokumente helfen.
z.B,
Das andere, von dem ich bekannt bin, ist, meine IDE zu verwenden, um eine Klasse umzugestalten, die gegen die Konvention verstößt. Arbeiten Sie dann am Code und überarbeiten Sie ihn wieder in einzelne Buchstaben. Macht es mir sowieso leichter, wenn viele Typparameter verwendet werden.
quelle