Java 要从其泛型类型参数派生的泛型类
汇编:Java 要从其泛型类型参数派生的泛型类,java,oop,generics,inheritance,metaprogramming,Java,Oop,Generics,Inheritance,Metaprogramming,汇编: public class SerializableObject<T> implements Serializable { public T m_object; } 公共类SerializableObject实现可序列化 { 公共目标; } 不编译: public class SerializableObject<T> extends T implements Serializable { } 公共类SerializableObject扩展T实现Serial
public class SerializableObject<T> implements Serializable
{
public T m_object;
}
公共类SerializableObject实现可序列化
{
公共目标;
}
不编译:
public class SerializableObject<T> extends T implements Serializable
{
}
公共类SerializableObject扩展T实现Serializable
{
}
因此,我希望泛型类从其泛型类型参数派生。为什么?
假设我有一个
映射
,我只想序列化它。我也不知道我会有哪把钥匙 我该怎么做 因此,我希望泛型类从其泛型类型参数派生 恐怕你不能那样做。这有多种技术原因,其中最重要的是类型擦除 你应该为你的问题寻找一个替代的解决方案——这个想法是一条死胡同 因此,我希望泛型类从其泛型类型参数派生 恐怕你不能那样做。这有多种技术原因,其中最重要的是类型擦除
你应该为你的问题寻找一个替代的解决方案——这个想法是一个死胡同。不,你的目标是接近一个动态类型,java不支持。不,你的目标是接近一个动态类型,java不支持。如果你可以在其他地方(例如,在包含映射的类上)定义
K
和V
,难道
不够吗?这毫无意义。您不能仅通过拍打接口来序列化不打算序列化的类的对象。类的开发人员必须预见到这一点(将字段标记为临时字段,确保其他字段可序列化等)。@Joeri+1用于“在其上拍打接口”LOL!提问没有坏处,你可以肯定如果你能在其他地方(例如在包含地图的类上)定义K
和V
,那么
就足够了吗?这没有意义。您不能仅通过拍打接口来序列化不打算序列化的类的对象。类的开发人员必须预见到这一点(将字段标记为临时字段,确保其他字段可序列化等)。@Joeri+1用于“在其上拍打接口”LOL!问问题没有坏处,你可能会被认为是一个奇怪的旁注:这在.NET/C中可能吗?它不使用擦除,但我想它在那里也不起作用。@Joachim:no,.NET也不允许它。奇怪的是,在.NET/C#中有这种可能吗?它不使用擦除,但我想它在那里也不起作用。@Joachim:不,.NET也不允许。也许吧。第一个示例有效,而第二个示例无效。他们应该允许。不,它实际上不是动态的,因为它在运行前编译。如果你不知道谁是动态的,你怎么能扩展它?编译器会发疯的。可以有抽象的方法,甚至可以是最终的类。第一个示例有效,而第二个示例无效。他们应该允许。不,它实际上不是动态的,因为它在运行前编译。如果你不知道谁是动态的,你怎么能扩展它?编译器会发疯的。可以有抽象方法,甚至可以是最终类。