为Java类添加JAX-B
Java批注时-如果我有一个父类条目,并且有两个子类Book和JournalArticle,
我是否要为所有三个类添加这些注释:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
即:
@XmlSeeAlso({au.com.library.Book.class, au.com.library.JournalArticle.class})
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public abstract class Entry implements Serializable{
private static final long serialVersionUID = -1895155325179947581L;
@XmlElement(name="title")
protected String title;
@XmlElement(name="author")
protected String author;
@XmlElement(name="year")
protected int year;
和
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class Book extends Entry {
@XmlElement(name="edition")
private String edition;
@XmlElement(name="publisher")
private String publisher;
@XmlElement(name="placeOfPublication")
private String placeOfPub;
和
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class JournalArticle extends Entry {
@XmlElement(name="journalTitle")
private String journalTitle;
@XmlElement(name="volume")
private String volume;
@XmlElement(name="issue")
private String issue;
@XmlElement(name="pageNumbers")
private String pgNumbers;
最佳答案
注释XmlAccessorType
可以被继承,因此我认为不是必须在子类上再次声明它。
@Inherited
@Retention(value=RUNTIME)
@Target(value={PACKAGE,TYPE})
public @interface XmlAccessorType
XmlRootElement
并非如此,因此您必须为其注释每个基类。您可以在javadoc的
@Inherited
批注中找到更多信息。更新您的评论:
@Retention(value=RUNTIME)
表示该类即使在运行时也保留此批注,即程序可以使用Java反射API来检查该批注是否存在于类中。@Target(value={PACKAGE,TYPE})
表示此注释可用于注释类,接口或枚举(用于value=TYPE
),也可以用于整个包级别(用于value=PACKAGE
)。您可以看到this thread解释它如何有用。有关Javadoc的更多信息:
@Retention
RetentionPolicy
@Target
ElementType
关于java - 从父级继承的元素的JAX-B批注,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12967523/