Kye*_*JmD 6 java generics wildcard bounded-wildcard
我有这门课
public class Tree<T> {
//List of branches for this tree
private List<Tree<? super T>> branch = new ArrayList<Tree<? super T>>();
public Tree(T t){ this.t = t; }
public void addBranch(Tree< ? super T> src){ branch.add(src); }
public Tree<? extends T> getBranch(int branchNum){
return (Tree<? extends T>) branch.get(branchNum);
}
private T t;
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用此类创建一个变量
public static void main(String[] args){
Tree<? super Number> num2 = new Tree<? super Number>(2);
}
Run Code Online (Sandbox Code Playgroud)
它给了我这个错误
Cannot instantiate the type Tree<? super Number>
Run Code Online (Sandbox Code Playgroud)
?创建新实例时不能使用通配符。您应该将代码更改为类似的内容
import java.util.ArrayList;
import java.util.List;
public class Test1 {
public static void main(String[] args){
Tree<? super Number> num2 = new Tree<Number>(2);
num2.addBranch(new Tree<Number>(1));
Tree<? super Number> num3 = (Tree<? super Number>) num2.getBranch(0);
System.out.println(num3);
}
}
class Tree<T> {
//List of branches for this tree
private List<Tree<? super T>> branch = new ArrayList<Tree<? super T>>();
public Tree(T t){ this.t = t; }
public void addBranch(Tree<Number> src){ branch.add((Tree<? super T>) src); }
public Tree<? extends T> getBranch(int branchNum){
return (Tree<? extends T>) branch.get(branchNum);
}
public String toString(){
return String.valueOf(t);
}
private T t;
}
Run Code Online (Sandbox Code Playgroud)
实例化泛型时应替换为相应的对象。
前任:
Tree<Integer> num2 = new Tree<Integer>(2);
Run Code Online (Sandbox Code Playgroud)