次のクラスが定義されているとします。
class Shape { }
class Circle extends Shape { }
class Rectangle extends Shape { } // 1
さまざまな形状を描画するための一般的なメソッドを作成できます。
public static <T extends Shape> void draw(T shape) { } // 2
Java コンパイラは T を Shape に置き換えます。
public static void draw(Shape shape) { } // 3
私の質問は、クラスで // 3 を直接定義した場合でも、 を渡しShape
、//3 でメソッドを参照Circle
できるということです。Rectangle
では、なぜ<T extends Shape>
//3 と同じになる型パラメーターを持つ // 2 ジェネリック メソッドを記述する必要があるのでしょうか。
このリンクを同じ例で参照できます: http://docs.oracle.com/javase/tutorial/java/generics/genMethods.html