2011-07-20 162 views
0

編譯得出:泛型類從它的泛型類型參數

public class SerializableObject<T> implements Serializable 
{ 
public T m_object; 
} 

不會編譯:

public class SerializableObject<T> extends T implements Serializable 
{ 
} 

所以,我希望有一個泛型類從它的泛型類型參數派生。
爲什麼?
比方說,我有一個Map<K, V>,我只是想序列化它。
我也不知道我會有哪些鑰匙。

我該怎麼做?

+0

如果你可以在其他地方(例如,在包含地圖的類上)定義'K'和'V',那麼''就足夠了嗎? – Thomas

+1

這沒有任何意義。你不能序列化一個不想被序列化的類的對象,只需通過掌握它的接口。該類的開發人員必須預見到這一點(將字段標記爲瞬態,確保其他字段可序列化等)。 –

+0

@Joeri +1「掌握界面」LOL!要求沒有傷害,你可能會感到驚訝 – Poni

回答

3

所以,我想要一個泛型類從它的泛型類型參數派生。

你只是不能那樣做,恐怕。這有多種技術原因,其中最重要的是類型擦除。

您應該爲您的問題尋找替代解決方案 - 這個想法是一個死路一條。

+0

作爲一個奇怪的旁註:這是可能的在.NET/C#?它不使用擦除,但我想它仍然不會在那裏工作。 –

+0

死路一條......呃......謝謝喬恩。 – Poni

+0

@Joachim:不,.NET不允許它。 –

0

不,你的目標是接近一個動態類型,這是java不支持的。

+0

也許吧。第一個例子工作,而第二個例子不工作。他們應該允許。不,實際上它不是動態的,因爲它在運行之前編譯。 – Poni

+0

如果你不知道誰是是,你怎麼可以擴展它?編譯器會發瘋。 可能有抽象方法,甚至可能是最終的類。 – everton