6

私はこのクラスを持っています

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>
4

2 に答える 2

5

新しいインスタンスを作成する場合、ワイルドカード?は使用できません。コードをそのようなものに変更する必要があります

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;

}
于 2012-08-30T15:32:32.047 に答える
4

ジェネリックをインスタンス化する間、対応するオブジェクトに置き換える必要があります。

元:

 Tree<Integer> num2 = new Tree<Integer>(2);
于 2012-08-30T15:15:33.037 に答える