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:
- Es gibt mehr als eine Konvention.
- Namen mit mehreren Zeichen stimmen mit anderen Java-Stilen überein, z. B. dem Google-Stil für Java .
- Die lesbaren Namen sind (Überraschung!) Besser lesbar.
Lesbarkeit
In einigen von mir geschriebenen Schnittstellen möchte ich generische Typparameter mit mehr als einem Zeichen benennen, um den Code besser lesbar zu machen.
Die Lesbarkeit ist gut.
Vergleichen Sie:
public final class EventProducer<L extends IEventListener<E>,E>
implements IEventProducer<L,E> {
zu:
public final class EventProducer<LISTENER extends IEventListener<EVENT>,EVENT>
implements IEventProducer<LISTENER, EVENT> {
oder mit der Mehrzeichenkonvention von Google:
public final class EventProducer<ListenerT extends IEventListener<EventT>,EventT>
implements IEventProducer<ListenerT, EventT> {
public final class EventProducer<ListenerT extends IEventListener<EventT>,EventT>
implements IEventProducer<ListenerT, EventT> {
Google-Stil
Der Google Java Style Guide ermöglicht sowohl Einzelbuchstaben als auch Klassen mit mehreren Zeichen, die mit T enden.
5.2.8 Variablennamen eingeben
Jede Typvariable wird in einem von zwei Stilen benannt:
Ein einzelner Großbuchstabe, die gegebenenfalls durch eine einzige Ziffer gefolgt (wie zum Beispiel E
, T
, X
, T2
)
Ein Name in der Form für die Klassen verwendet (Abschnitt 5.2.2, siehe Klassennamen ), gefolgt von den Großbuchstaben T (Beispiele: RequestT
, FooBarT
).
Probleme
"Ohne diese Konvention wäre es schwierig, den Unterschied zwischen einer Typvariablen und einem normalen Klassen- oder Schnittstellennamen zu erkennen." - aus den Oracle-Tutorials "Generische Typen"
Einzelzeichennamen sind nicht die einzige Möglichkeit, Typparameter von Klassennamen zu unterscheiden, wie wir oben gesehen haben.
Warum nicht einfach die Bedeutung der Typparameter im JavaDoc dokumentieren?
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.)
Parameternamen mit mehreren Zeichen entsprechen nicht der Oracle-Konvention!
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.