9

ジェネリック、特にジェネリック メソッドの優先に関する項目については、Effective Java Chapter 5 を読んでいました。戻り値の型の前のメソッド宣言の型パラメーター (山かっこの間) が省略される場合があることに気付きました。そのような場合が多いのですが、例えば第2版の135ページにはこうあります。

public void popAll(Collection<E> dst) {
while (!isEmpty())
dst.add(pop());
} 

一方、宣言を使用した同様のジェネリックメソッドを見てきました

public <E> void ...

最初のはタイプミスですか?そうでない場合、いつ宣言から括弧を省略できますか?

ありがとう

4

3 に答える 3

1

答えは...そうではありません。「ジェネリック メソッド」は、戻り値の型の前に型変数を宣言するものとして定義されます。

1 つ以上の型変数を宣言する場合、メソッドはジェネリックです。( JLS 8.4.4 )

したがって、popAll「一般的な方法」ではありません。

メソッドは type parameter を宣言しないため、外側のEスコープで定義する必要があります。ほとんどの場合、メソッドを含むクラス (「ジェネリック クラス」) によるものです。

于 2014-09-01T06:10:29.627 に答える