【发布时间】:2013-03-21 14:13:27
【问题描述】:
假设定义了以下类:
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、Circle 和 Rectangle 引用传递给 //3 处的方法。那我们为什么要写 // 2 泛型方法,类型参数 <T extends Shape> 不合时宜地和 //3 一样?
您可以使用相同的示例参考此链接:http://docs.oracle.com/javase/tutorial/java/generics/genMethods.html
【问题讨论】:
-
你很可能不会。这基本上会成为一个坏例子。
-
你不需要做方法 //2。实际上,最好使用方法 //3,因为继承的目的之一是传递继承对象的许多“形状”。所以在这种情况下 //3 更有意义。