无法实例化泛型中的类型

问题描述 投票:0回答:2

我有这门课

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;

}

我正在尝试使用这个从这个类中创建一个变量

public static void main(String[] args){ 
        Tree<? super Number> num2 = new Tree<? super Number>(2);
    }

它给了我这个错误

Cannot instantiate the type Tree<? super Number>
java generics wildcard bounded-wildcard
2个回答
4
投票

实例化泛型时应替换为相应的对象。

例如:

 Tree<Integer> num2 = new Tree<Integer>(2);

4
投票
创建新实例时不能使用通配符

?

。您应该将代码更改为类似的内容

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; }
    
© www.soinside.com 2019 - 2024. All rights reserved.