2011-07-20 54 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