Cannot Instantiate Type in generics

后端 未结 2 675

I have this class

public class Tree {

    //List of branches for this tree
    private List> branch = new ArrayList<         


        
相关标签:
2条回答
  • 2020-12-11 18:36

    While instantiating generics should be replaced with corresponding objects.

    Ex:

     Tree<Integer> num2 = new Tree<Integer>(2);
    
    0 讨论(0)
  • 2020-12-11 18:41

    Wildcards ? cannot be used when creating new instances. You should change your code to something like that

    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;
    
    }
    
    0 讨论(0)
提交回复
热议问题