我在Bukkit论坛上问了这个问题,但从那里收到的支持似乎没有削减它。我要做的是序列化一个实现ConfigurationSerializable的子类对象列表(这是Bukkit的API。)列表序列化很好,但是当它从配置文件反序列化时,它试图转换{{1到List<?>
,这不起作用。
我有四个班级:
List<? extends Superclass>
SubclassList包含一个名为“超类”的Superclass
SubclassOne extends Superclass implements ConfigurationSerializable
SubclassTwo extends Superclass implements ConfigurationSerializable
SubclassList implements ConfigurationSerializable
。
这是序列化方法:
List<? extends Superclass>
这是反序列化方法:
@Override
public Map<String, Object> serialize() {
Map<String, Object> results = new HashMap<String, Object>();
results.put("supers", superclasses);
return results;
}
如上所述,数据正确地序列化到配置文件。我已经做了一些实验,当我在args.get(“supers”)中打印出对象的类类型时,它会打印出正确的类名,但我无法转换这些@SuppressWarnings("unchecked")
public static SubclassList deserialize(Map<String, Object> args){
return new SubclassList((List<? super Superclass>) args.get("supers"));
}
类成为?
类,以便它们可以传递给SubclassList的构造函数。
我没有序列化超类的原因是因为我想用它来检索与其子类关联的数据。我想使用? extends Superclass
来存储所有类型的超类(关于它的子类)。
如果没有简单而有效的方法来解决这个问题,我愿意接受其他建议来帮助我实现我想要做的事情。我希望尽可能高效。