2017-07-07 5 views
2

Die Java documentation besagt, dass, wenn es mehrere generische Parameter gibt, die Konvention, S, U, V usw. für die 2., 3., 4. Typen zu verwenden. Gilt diese Konvention für den gesamten Bereich einer einschließenden Gruppe <> oder für eine Klasse?Java generischer Typ Parameter Namenskonvention Geltungsbereich

Zum Beispiel, wenn ich eine Klasse mit zwei separaten Methoden, die verschiedene generische Parameter verwenden, funktioniert die obige Konvention meine ich sollte den Code wie folgt schreiben:

public abstract class MyClass 
{ 
    public abstract <T extends Class1> T method1(); 
    public abstract <S extends Class2> S method2(); 
} 

Oder wie folgt aus:

public abstract class MyClass 
{ 
    public abstract <T extends Class1> T method1(); 
    public abstract <T extends Class2> T method2(); 
} 
+4

Definitiv die zweite Möglichkeit. Die Konvention besteht darin, Typen im selben Umfang zu unterscheiden, ähnlich der Konvention von "i" und "j" für Indexvariablen. – shmosel

+0

Nicht sicher, dass es eine Konvention dafür gibt, aber ich persönlich würde die erste bevorzugen. Viel weniger Chance, dass jemand den Code nach dir liest und verwirrt ist. – markspace

+0

so Meinung basiert? –

Antwort

4

Die zweite ist sicherlich konventioneller. Das erste Muster wird nicht bestehen, wenn Sie eine große Dienstprogrammklasse mit generischen Methoden haben.

Wir können Beispiele für diese here in openjdk und in beliebten Bibliotheken wie this Guave-Klasse zu sehen. Beachten Sie, dass beide in den meisten Methoden T als Typvariable wiederverwenden. Dadurch können andere Bezeichner wie E, K, V usw. eine semantische Bedeutung behalten.

Verwandte Themen