2017-07-07 12 views
2

Java documentationには、複数のジェネリックパラメータがある場合、2番目、3番目、4番目の型にS、U、Vなどを使用するという規則があります。このコンベンションは、<>グループの1つのスコープにまたがって、またはクラス全体に適用されますか?Javaジェネリック型パラメータの命名規則のスコープ

私は別の汎用パラメータを使用する2つの別々のメソッドを持つクラスを持っている場合たとえば、上記の規則は、私はこのようなコードを書く必要がありどういう意味:

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

2番目の方法は間違いありません。規約は、同じスコープ内の型を区別することであり、インデックス変数のための 'i'と' j'の規約に似ています。 – shmosel

+0

これには慣習があるのか​​どうかわかりませんが、私は個人的には最初の方が好きです。あなたの後でコードを読んで混乱させるチャンスがずっと少なくなります。 – markspace

+0

意見に基づいていますか? –

答えて

4

2番目は確かに従来のものです。ジェネリックメソッドを持つ大きなユーティリティクラスを持っている場合、最初のパターンは保持されません。

この例はopenjdkのhereと、this guavaクラスのようなポピュラーライブラリにあります。彼らは、ほとんどのメソッドで型変数としてTを再利用することに注意してください。これにより、E、K、Vなどの他の識別子がいくつかの意味的意味を保持できるようになります。