如何獲取一個參數化的Class對象作爲方法參數?泛型:創建參數化類參數
class A<T>
{
public A(Class<T> c)
{
}
void main()
{
A<String> a1 = new A<String>(String.class); // OK
A<List<String>> a2 = new A<List<String>>(List<String>.class); // error
A<List<String>> a3 = new A<List<String>>(Class<List<String>>); // error
}
}
爲什麼我要這樣做,你可能會問?我有一個參數化類,其類型是另一個參數化類,其構造函數要求其他類類型作爲參數。我知道運行時類沒有關於它們的類型參數的信息,但是這不應該阻止我在編譯時這樣做。看來我應該能夠指定一個類型,例如List<String>.class
。是否有另一種語法來做到這一點?
這裏是我的實際使用情況:
public class Bunch<B>
{
Class<B> type;
public Bunch(Class<B> type)
{
this.type = type;
}
public static class MyBunch<M> extends Bunch<List<M>>
{
Class<M> individualType;
// This constructor has redundant information.
public MyBunch(Class<M> individualType, Class<List<M>> listType)
{
super(listType);
this.individualType = individualType;
}
// I would prefer this constructor.
public MyBunch(Class<M> individualType)
{
super(/* What do I put here? */);
this.individualType = individualType;
}
}
}
這可能嗎?
看看谷歌Gson的'TypeToken' http://google-gson.googlecode。 COM/SVN /中繼/ GSON /文檔/ javadocs中/ COM /谷歌/ GSON /反射/ TypeToken.html。它是開源的,它解決了你遇到的同樣的問題。 – BalusC
[Java通用函數:如何返回泛型類型]的可能重複(http://stackoverflow.com/questions/1959022/java-generic-function-how-to-return-generic-type) – BalusC
謝謝BalusC。首先,我很安慰我不會錯過簡單的事情。但是我還沒有準備好這樣做,因爲在我的應用程序中處理** Type **而不是** Class ** es看起來很困難。 –