假設下面的類定義: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