1

为 Java 类添加JAX-BJava 注释时 - 如果我有一个父Class Entry,有两个孩子BookJournalArticle

我会为所有三个类添加这些注释:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement

IE:

@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;
4

1 回答 1

1

注释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)。你可以看到这个线程解释这如何有用。

有关 Javadoc 的更多信息:

于 2012-10-19T04:59:28.923 回答