3

渡した指定の型のベクトルを返す関数を作成したいと思います。例えば:

// Here getNewVector(<ClassType>) should return me an integer Vector.
Vector<Integer> myIntVector = getNewVector(Integer.class);
//should get a String vector in this case and so on.
Vector<String> myStringVector = getNewVector(String.class) ; 

getVector(Class classType)その特定のクラスタイプの新しいベクトルを返すような方法で実装したいと思います。リフレクションを使用せず、クラス名を文字列として渡さないことで、どうすればそれを実現できますか(上記の例で述べたように、クラスタイプのみを渡したいと思います)。

実際、私はこのような関数getVector()が必要です。

Vector<T> getVector(T t) {
    return new Vector<t>();
}
4

3 に答える 3

8

ジェネリックメソッドのJavaチュートリアルをご覧ください。これがあなたがやりたいことをする一つの方法です:

public static <T> Vector<T> getVector(Class<T> clazz) {
  return new Vector<T>()
}

public static <T> Vector<T> getVector(T t) {
  Vector<T> vector = new Vector<T>();
  vector.add(t);
  return vector;
}

t私はあなたがあなたが渡したものをただ捨てたくないと思っているgetVector(T t)ので、私はそれをに貼り付けましたVector

理論的には、入力メカニズムだけが必要な場合は、メソッドに何も渡す必要はありません。

public static <T> Vector<T> getVector() {
  return new Vector<T>();
}

//Usage
Vector<Integer> vector = getVector();

Vector<Integer>Javaは、宣言のジェネリック型から、型として入力する必要があることを認識できます。

于 2012-06-16T19:55:03.937 に答える
1
public <T> Vector<T> getNewVector(Class<T> type) {
    return new Vector<T>();
}
于 2012-06-16T19:55:19.660 に答える
1

なぜここで関数を書くのも面倒なのですか?

Vector<Integer> myIntVector = new Vector<Integer>();

または、Java 7を使用している場合は、さらに良いでしょう。

Vector<Integer> myIntVector = new Vector<>();

(もちろん、要素タイプが異なるベクトルタイプ間では、実行時に実際の違いはありません。)

于 2012-06-16T21:58:01.427 に答える