为什么/何时应该使用泛型方法?

Zar*_*Zar 5 java oop generics

在学习 Java 时,我遇到了泛型方法

public <T> void foo(T variable) { }
Run Code Online (Sandbox Code Playgroud)

也就是说,一个方法接受一个未确定类型的参数 (á la PHP?)。然而,我不知道这将是一个怎样的好解决方案——尤其是因为我在从松散的语言中走出来之后,已经爱上了强类型语言。

有什么理由使用泛型方法吗?如果有,什么时候?

hvg*_*des 3

除其他外,泛型为您提供了一种提供模板的方法——即您想要做同样的事情,唯一的区别是类型。

例如,查看List API,您将看到以下方法

add(E e)

对于您声明的相同类型的每个列表,该add方法的唯一不同之处是进入列表的事物的类型。这是泛型有用的一个典型例子。(在 Java 中引入泛型之前,您可以声明一个列表,并且可以将任何内容添加到列表中,但是在检索对象时必须强制转换该对象)

更具体地说,您可能需要 2 个 ArrayList 实例,一个采用 type1,另一个采用 type2。的列表代码add将对每个列表执行相同的操作,执行相同的代码(因为这两个列表都是ArrayList实例),对吧?所以唯一不同的是列表中的内容。

(正如 @michael 指出的,add这不是泛型方法的真实示例,但链接的 API 中有真正的泛型方法,并且概念是相同的)