这是我得到的:
public class Node<T> {
// instance variables
private Node<T> next;
private T data;
// construct with data
private Node(T data){
next = null;
this.data = data;
}
// construct without data
private Node(){
next = null;
this.data = null;
}
// static factory method
public static <T> Node<T> newNodeWithData(T data){
return new Node<T>(data);
}
// static factory method
public static <T> Node<T> newNode(){
return new Node<T>();
}
...
}
我的问题实际上只是关于泛型的语法以及静态工厂方法的语法。我不太明白为什么我们在方法声明中将
最佳答案
您要问的是类型推断。
由于它是一个静态方法,它必须从某个地方推断出 Generic 类型;您没有该类的实例。这就是 <T>
方法。
在你的方法不带参数的情况下,它实际上是从赋值的目标推断出来的。例如,假设您的方法如下所示:
public static <T> List<T> getNewList() {
return new ArrayList<T>();
}
使用此方法时,T
从目标推断(在本例中为 String
):
List<String> myList = MyClass.getNewList();
在您有通用参数的其他静态方法中,T
正在从传入的类型推断:
public static <T> List<T> getNewListWithElement(T element) {
List<T> list = new ArrayList<T>();
list.add(element);
return list;
}
在这里,如果您尝试这样做:
List<String> myList = MyClass.getNewListWithElement(new Integer(4));
它会告诉你你的目标类型是错误的,你需要一个 List<Integer>
关于Java 泛型和静态工厂方法——语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20751867/