2017-07-07 61 views
2

Java documentation表示當存在多個通用參數時,約定是對第2,3,4類使用S,U,V等。這個約定是否適用於整個圍繞<>小組或整個班級的範圍?Java通用類型參數命名約定範圍

例如,如果我有使用不同的泛型參數兩種不同的方法類,做上述慣例的意思是我應該寫這樣的代碼:

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

或者這樣:

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

絕對是第二種方式。約定是區分同一範圍內的類型,類似於索引變量的'i'和'j'約定。 – shmosel

+0

不知道這有一個約定,但我個人更喜歡第一個。有人在你後面讀代碼並且感到困惑的可能性要小得多。 – markspace

+0

有意見爲主嗎? –

回答

4

第二個肯定比較傳統。如果你有一個帶有泛型方法的大型實用程序類,第一種模式將不起作用。

我們可以看到這個here的例子在OpenJDK的,和流行的庫,例如this番石榴類。注意它們在大多數方法中都重用T作爲一個類型變量。這允許其他標識符如E,K,V等保留一些語義含義。