在java中编写泛型函数

时间:2012-06-16 19:52:39

标签: java generics

我想写一个函数,它会返回一个我传递给它的指定类型的Vector。例如:

// 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),以便返回该特定类类型的新向量。我们如何在不使用反射的情况下实现它,并且不将类名称作为String传递(我想仅传递类类型,就像我在上面的例子中提到的那样。)

实际上,我想要一个像这样的函数getVector()..

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

3 个答案:

答案 0 :(得分:8)

看看Java Tutorial for Generic Methods。这是一种做你想做的事情的方法:

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();

Java可以通过声明中的泛型类型确定您希望将其键入为Vector<Integer>

答案 1 :(得分:1)

public <T> Vector<T> getNewVector(Class<T> type) {
    return new Vector<T>();
}

答案 2 :(得分:1)

为什么在这里写一个函数呢?

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

或者,更好的是,如果您使用的是Java 7,

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

(当然,在运行时,在具有不同元素类型的矢量类型之间没有实际差异。)