下一个方法是通用的,但我只想知道 ? 的用处是什么<T>?,我的意思是<T>who 位于 static 旁边,位于 void 之前。如果我不在我的方法中编写它会发生什么?
public static <T> void nameMethod(BinaryTreeNode<T> t){
/*do something
.
.
*/
}
Run Code Online (Sandbox Code Playgroud)
谢谢。
<T>为方法的整个上下文定义类型参数。据我所知,在这种特殊情况下,它确实相当于
public static void nameMethod(BinaryTreeNode<?> t) {
Run Code Online (Sandbox Code Playgroud)
但是,如果您返回一个 type T,或者您有多个具有相同泛型类型的参数,则需要声明该类型参数,以便编译器有一个参考点来识别该类型。例如:
public static <T> List<T> mergeSort(List<T> l1, List<T> l2) {
//...
}
Run Code Online (Sandbox Code Playgroud)
该<T>参数告诉编译器List传递的和List返回的都必须是相同的泛型类型。
当我们可以声明以下附加信息时,这会更加有用T:
public static <T extends Number> List<T> asList(T... numbers) {
//build list with Number-specific logic...
}
Run Code Online (Sandbox Code Playgroud)
编辑:我的第一点是不正确的。即使没有额外的参数或返回类型,声明<T>. 我将提供一个使用 a 的简单示例List,因为我对此不熟悉BinaryTreeNode。
public static <T> void duplicateFirstElement(List<T> l) {
T elm = l.get(0);
l.add(elm);
}
Run Code Online (Sandbox Code Playgroud)
如果我们要删除类型参数并将参数声明为List<?>,则在与列表交互时将无法保留泛型类型。
| 归档时间: |
|
| 查看次数: |
9421 次 |
| 最近记录: |