2012-06-16 136 views
3

我想寫一個函數,它會返回給我一個指定類型的Vector,並傳遞給它。例如:在java中編寫通用函數

// 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>(); 
} 
+1

我會考慮使用Vector的三倍。你有沒有考慮過使用List? – KidTempo

回答

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>從一般的打字聲明。

+0

非常感謝。真的非常有幫助Tim – Anish

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

似乎應該是一種靜態方法。 – Justin

1

爲什麼在這裏寫功能呢?

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

,或者甚至更好,如果你是在Java 7中,

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

(有在運行時用不同的元素類型沒有實際的區別,當然,矢量類型之間。)