下一个方法是通用的,但我只想知道<T>
的有用性是什么?我的意思是<T>
谁是静态的,之前是无效的。如果我不在我的方法中写它会怎么样?
public static <T> void nameMethod(BinaryTreeNode<T> t){
/*do something
.
.
*/
}
谢谢。
答案 0 :(得分:2)
<T>
为方法的整个上下文定义了一个类型参数。据我所知,在这种特殊情况下,它确实等同于
public static void nameMethod(BinaryTreeNode<?> t) {
但是,如果您返回类型T
,或者如果您有多个具有相同泛型类型的参数,则需要声明type参数,以便编译器具有一个参考点来标识类型。例如:
public static <T> List<T> mergeSort(List<T> l1, List<T> l2) {
//...
}
<T>
参数告诉编译器传递的List
和返回的List
必须是相同的泛型类型。
当我们可以声明有关T
的其他信息时,这会更有用:
public static <T extends Number> List<T> asList(T... numbers) {
//build list with Number-specific logic...
}
编辑:我的第一点不正确。即使没有其他参数或返回类型,也可以用于声明<T>
。我将使用List
提供一个简单示例,因为我不熟悉此BinaryTreeNode
。
public static <T> void duplicateFirstElement(List<T> l) {
T elm = l.get(0);
l.add(elm);
}
如果我们要删除type参数并将参数声明为List<?>
,那么在与列表交互时就无法保留泛型类型。