我相信您正在寻找@XmlType
注释。以下是如何使用它的示例:
Java 模型
根
import java.util.*;
import javax.xml.bind.annotation.*;
@XmlRootElement
public class Root {
private List<AbstractClass> classes = new ArrayList<AbstractClass>();
@XmlElement(name="class")
public List<AbstractClass> getClasses() {
return classes;
}
}
抽象类
当元数据被计算出来时,我们将使用@XmlSeeAlso
注释来引发Class1
和处理。Class2
Java 没有提供一种机制来反射地访问一个类的子类。
import javax.xml.bind.annotation.XmlSeeAlso;
@XmlSeeAlso({Class1.class, Class2.class})
public class AbstractClass {
}
第一类
默认情况下,每个类都有一个为短类名派生的类指示符名称。
public class Class1 extends AbstractClass {
}
2 类
我们可以使用@XmlType
注解来覆盖类指示符名称。
import javax.xml.bind.annotation.XmlType;
@XmlType(name="class-two")
public class Class2 extends AbstractClass {
}
演示代码
演示
下面我们将创建一个实例Root
并设置 和 的实例,Class1
该Class2
属性classes
是超类型的AbstractClass
。
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Root.class);
Root root = new Root();
root.getClasses().add(new Class1());
root.getClasses().add(new Class2());
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);
}
}
输出
xsi:type
的实例的值Class1
是从类名派生的,实例的值Class2
对应于我们在@XmlType
注解上设置的名称。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<class xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="class1"/>
<class xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="class-two"/>
</root>