【问题标题】:Generic class to derive from its generic type parameter泛型类从其泛型类型参数派生
【发布时间】:2011-10-09 07:12:45
【问题描述】:

编译:

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

不编译:

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

所以,我想要一个泛型类从其泛型类型参数派生。
为什么?
假设我有一个Map&lt;K, V&gt;,我只是想序列化它。
我也不知道我会有哪些钥匙。

我该怎么做?

【问题讨论】:

  • 如果您可以在别处定义KV(例如,在包含地图的类上),&lt;K extends Serializable&gt; 还不够吗?
  • 这毫无意义。你不能序列化一个不打算序列化的类的对象,只需在其上打接口即可。该类的开发人员必须预见到这一点(将字段标记为瞬态,确保其他字段可序列化等)。
  • @Joeri +1 为“在它上面拍接口”大声笑!询问无伤大雅,您可能会得到肯定

标签: java oop generics inheritance metaprogramming


【解决方案1】:

所以,我想要一个泛型类从其泛型类型参数派生。

恐怕你不能那样做。这有多种技术原因,尤其是类型擦除。

您应该为您的问题寻找替代解决方案 - 这个想法是死胡同。

【讨论】:

  • 作为一个奇怪的旁注:这在 .NET/C# 中是否可行?它不使用擦除,但我想它仍然无法在那里工作。
  • @Joachim:不,.NET 也不允许这样做。
【解决方案2】:

不,您的目标是接近动态类型,这是 java 不支持的。

【讨论】:

  • 也许吧。第一个示例有效,而第二个示例无效。他们应该允许。不,它实际上不是动态的,因为它在运行时之前编译。
  • 如果你不知道是谁,你怎么能扩展它呢?编译器会发疯。 可以有抽象方法,甚至是最终类。
猜你喜欢
  • 1970-01-01
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-24
  • 1970-01-01
  • 2010-10-22
  • 2012-09-08
相关资源
最近更新 更多