假设我有一个包含以下类的 JAR xxx-core.jar:
@XmlRootElement
@XmlSeeAlso({Imp1.class, Imp2.class})
public abstract class Abst {...}
@XmlRootElement
public class Imp1 extends Abst {...}
@XmlRootElement
public class Imp2 extends Abst {...}
public class Main {
@XmlElement
private Abst abst;
public static void load(File file) {
// unmarshal this
}
public void save(File file) {
// marshal this
}
}
到目前为止,一切都很好。Main 可以编组和解组,使用 Abst 的正确实现。
现在,当其他人出现并创建另一个使用 xxx-core.jar 但包含以下类的项目 xxx-extension.jar 时会发生什么:
@XmlRootElement
public class ExtensionImp extends Abst {...}
并将这个新实现的一个实例分配给 Main 的成员变量?由于 XmlSeeAlso 注释中没有明确给出,我如何确保 ExtensionImp 将被正确编组/解组?(我玩过 JAXBContext.newInstance() 中的类列表,但这似乎并没有解决问题。)