2012-12-21 61 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

相关问题