Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 要从其泛型类型参数派生的泛型类_Java_Oop_Generics_Inheritance_Metaprogramming - Fatal编程技术网

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也不允许。也许吧。第一个示例有效,而第二个示例无效。他们应该允许。不,它实际上不是动态的,因为它在运行前编译。如果你不知道谁是动态的,你怎么能扩展它?编译器会发疯的。可以有抽象的方法,甚至可以是最终的类。第一个示例有效,而第二个示例无效。他们应该允许。不,它实际上不是动态的,因为它在运行前编译。如果你不知道谁是动态的,你怎么能扩展它?编译器会发疯的。可以有抽象方法,甚至可以是最终类。