什么是适用的通用方法,什么时候不适用?

时间:2014-08-10 19:50:08

标签: java generics collections generic-method

我试图深入了解何时编写泛型方法与非泛型方法。 Collection接口和Collections助手类都有addAll()方法,虽然有不同的签名,前者不是 泛型方法,而后者有 是一种通用方法:

Collection中的addAll()签名:

  boolean addAll(Collection<? extends E> c);

集合中addAll()的签名:

 @SafeVarargs
    public static <T> boolean addAll(Collection<? super T> c, T... elements){}

作为一般规则,何时编写泛型与非泛型方法是合适的?

编辑:我对术语泛型方法的理解是,在方法的返回类型之前,它将在尖括号中具有类型参数或逗号分隔的类型参数列表。如果定义不正确,请纠正我。

2 个答案:

答案 0 :(得分:0)

我认为你应该只使用泛型方法。如果你使用泛型方法/容器,你的代码是类型安全的。集合和集合类保留了一些非泛型的&#34;方法只提供向后兼容性。你可以阅读&#34; Effective Java - 第二版&#34;(由Joshua Bloch编写),第23和34条;不要在新代码中使用原始类型&#34;你会明白为什么使用泛型方法会更好。

答案 1 :(得分:0)

首先,您需要了解Collections只是一个具有静态方法的具体类,用于操作Collection接口实例。因此,类Collections不是通用的,但它有一些通用的解决静态方法参数的方法本身可能是通用的

实际上,两者都是泛型方法。前者是泛型类的泛型方法,而后者只是一种通用方法,而不是整个类是通用的。

第二种情况的参数中的超级关键字只是允许将元素添加到它。如果它是扩展特定类型的任何类型的集合,那么您将无法添加元素