假设下面的类定义:T类型参数
class Shape { }
class Circle extends Shape { }
class Rectangle extends Shape { } // 1
你可以写一个通用的方法来绘制不同的形状:
public static <T extends Shape> void draw(T shape) { } // 2
Java编译器取代了T,带形状:
public static void draw(Shape shape) { } // 3
我的问题是,如果我们直接定义// 3,那么我们仍然可以t通过Shape
,Circle
和Rectangle
参考方法在// 3。那么为什么我们需要编写// 2类型参数为<T extends Shape>
的泛型方法,它与// 3非常相似?
您可以参考该链接,以同样的例子:http://docs.oracle.com/javase/tutorial/java/generics/genMethods.html
你很可能没有。这基本上是一个坏榜样。 – 2013-03-21 14:15:06
你不需要做方法// 2。实际上,最好做方法// 3,因为继承的目的之一是传递许多继承对象的“形状”。所以在这种情况下// 3更有意义。 – 2013-03-21 14:16:36