2012-12-21 60 views
3

泛型方法和方法只是接受Object的優點是什麼?它如何確保類型安全?Java泛型方法和方法對象作爲參數有什麼不同?

例如:當在下面的代碼片段中提到的任一形式中定義我的接口時,它有什麼不同?

public interface MyInterface { 
    public <MT> String myMethod(MT t); 
} 

OR

public interface MyInterface { 
    public String myMethod(Object t); 
} 

在我看來通用的方法是有利的,只有當我們輸入它周圍的約束。例如類型參數像Serializable類的應該。否則就沒有意義了..尋找更多的有識之士

public interface MyInterface { 
    public <MT extends Serializable> String myMethod(MT t); 
} 
+0

更正了我的問題。由於某種原因不能把「<>」的代碼... – Chetan

回答

11

一種方法,通常是由通用,以確保兩個參數是相互兼容的,還是要回到它的類型取決於通用類型的值方法。

例如,

public static <T> void sort(List<T> list, Comparator<? super T> c) 

確保列表的類型和比較的類型是兼容的,這沒有必要是,如果簽名是

public static void sort(List list, Comparator c) 

在同以下示例中,返回值的類型取決於方法的通用類型:

public static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll) 

它允許這樣做的:

List<Integer> intList = ...; 
Integer min = Collections.min(intList); 

如果該方法是

public static Comparable T min(Collection coll) 

你會做

Integer min = (Integer) Collections.min(intList); 

,如果你改變了你就不會從編譯器發出任何警告代碼到

Long min = (Long) Collections.min(intList); 
+0

非常感謝..多數民衆贊成在很多解釋... – Chetan

-1

通用方法限制可以傳遞給方法的參數的類型。這會產生更多的內聚代碼,限制它可以處理的輸入,因此可以合理地假定它們具有某些特徵。

對於e.g

public interface MyInterface { 
    public [MT extends BaseClass] String myMethod(MT t); 
} 

在這裏,你一直都知道所有的BaseClass的適用方法適用於這種方法來噸。

+3

-1爲「擴展字符串」 –

+1

「字符串」是最終的,所以這個例子可能不是最好的。 – GargantuChet

+0

寒冷的傢伙,我已經點擊提交前一個小的檢查,我已經在一些代碼。編輯.. huh – LPD

相關問題