Java中的泛型方法

Java中的泛型方法,java,generics,Java,Generics,下一个方法是泛型的,但我只想知道它的有用性是什么,我指的是谁是静态的,在无效之前。如果我不在我的方法中写入它会发生什么 public static <T> void nameMethod(BinaryTreeNode<T> t){ /*do something . . */ } 谢谢。为方法的整个上下文定义一个类型参数。据我所知,在这个特殊情况下,它确实相当于 public static void nameMeth

下一个方法是泛型的,但我只想知道它的有用性是什么,我指的是谁是静态的,在无效之前。如果我不在我的方法中写入它会发生什么

public static <T> void nameMethod(BinaryTreeNode<T> t){
     /*do something
         .
         .
     */
}
谢谢。

为方法的整个上下文定义一个类型参数。据我所知,在这个特殊情况下,它确实相当于

public static void nameMethod(BinaryTreeNode<?> t) {
该参数告诉编译器,传递的列表和返回的列表必须是相同的泛型类型

当我们可以声明关于T的附加信息时,这更有用:


如果要删除类型参数并将参数声明为列表,那么在与列表交互时将无法保留泛型类型。

为什么不试试看?让你的方法成为泛型,也就是说它可以返回任何类型的对象。关于java泛型的教程将消除您的疑虑我知道在某些情况下,代码不会编译,但我不知道为什么,我只知道我必须编写它,但我想知道为什么。在什么情况下代码不会编译,会出现什么编译错误?在那里声明类型会使方法泛型。如果没有在那里声明类型,则表示该方法不是泛型的。除非希望方法是泛型的,否则不必编写它。因为编写它会使方法变得通用。因为这是Java语言设计人员为您提供的语法,用于表示您希望方法是泛型的。如果您没有在那里声明它,那么该方法将不是泛型的,因为您没有指定它应该是泛型的。
public static <T> List<T> mergeSort(List<T> l1, List<T> l2) {
    //...
}
public static <T extends Number> List<T> asList(T... numbers) {
    //build list with Number-specific logic...
}
public static <T> void duplicateFirstElement(List<T> l) {
    T elm = l.get(0);
    l.add(elm);
}