Unable to instantiate generic type

I have this class

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; } 

And I'm trying to create a variable from this class using this

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

and he gives me this error

 Cannot instantiate the type Tree<? super Number> 
+5
source share
2 answers

Whereas generic instances need to be replaced with appropriate objects.

Example:

  Tree<Integer> num2 = new Tree<Integer>(2); 
+3
source

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

 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; } 
+3
source

Source: https://habr.com/ru/post/927103/


All Articles