2016-10-06 229 views
0

的一個實例我有一個泛型類,如下所示:單一的方法返回不同的泛型類型的類

MyClass<T> 
{ 
    .... 
} 

現在,我想創建一個通用的方法是什麼,比方說public MyClass<T> getMyClassInstance(Type t){...},其中我傳遞了一個類型,並且此方法給出了該類型的MyClass的實例。


請參閱以下示例。

  1. 如果我把這個方法如下,getMyClassInstance(Integer_type),則返回MyClass<Integer>實例。

  2. 同樣,如果我將這個方法調用如下getMyClassInstance(String_type),那麼它將返回MyClass<String>實例。

我該怎麼寫這種方法?如果無法完成,是否有其他方法或更好的方法來做這樣的事情?

+0

你不想爲此使用構造函數嗎?如果是這樣,是因爲你想要單身還是其他? – Zircon

+0

什麼是'String_type'和'Integer_type'?他們是'String.class'和'Integer.class'還是別的? – khelwood

+1

這真的不清楚。你有什麼?你想要什麼?什麼是'Type'和'Integer_type'? – Tunaki

回答

1

對於這種簡單的應用,您甚至不需要傳遞TypeClass參數。考慮以下幾點:

public <T> List<T> getList() { 
    return new ArrayList<>(); 
} 

要使用這個很簡單,只要:

List<Integer> lst = getList(); 

編譯器會推斷出所需的列表類型。

請注意,通過傳遞參數Type可以獲得更大的靈活性,特別是在您事先不知道您想要返回什麼種類List的情況下。但是這種語法,恕我直言,閱讀更自然,可能適合你想要做的。 (我說「可能」,因爲你沒有提供大量的細節......)

+0

謝謝你的解釋。重新審查後,我同意這種方法確實更適合我的具體情況。 – greenPadawan

0

Type類必須攜帶類型參數就可以了:Type<T>,所以你可以聲明

<T> MyClass<T> getMyClassInstance(Type<T> t); 

如果你不能做到這一點,那麼編譯器是盲目的。