创建通用的抽象类JAXB [英] Creating abstract generic jaxb class
问题描述
我有以下简单的JAXB类,它的通用类型E
I have the following simple jaxB class that takes generic type E
@XmlAccessorType(XmlAccessType.FIELD)
@XmlTransient
@XmlRootElement(name = "searchResponseBase")
public abstract class SearchResponseBase<E>{
@XmlElement(type=NameSearchResults.class)
protected E searchResults;
public E getSearchResults()
{
return searchResults;
}
public void setSearchResults(E mSearchResults)
{
this.searchResults = mSearchResults;
}
}
我需要删除提及NameSearchResults @XmlElement(类型= NameSearchResults.class)
制造基地实际上通用的,但如果我这样做,我得到的错误。
I need to remove the reference to NameSearchResults @XmlElement(type=NameSearchResults.class)
to make the base actually generic, but if I do I get the error.
错误
[com.sun.istack.internal.SAXException2: class au.test.nameSearch.NameSearchResults nor any of its super class is known to this context.
javax.xml.bind.JAXBException: class au.test.nameSearch.NameSearchResults nor any of its super class is known to this context.]
这是一个扩展它的类的实例
This is an example of a class that extends it
扩展分类
@SuppressWarnings("javadoc")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = {
"searchRequest",
"searchResults"
})
@XmlRootElement(name = "searchResponse")
public class SearchResponse extends SearchResponseBase<NameSearchResults> {
@XmlElement(required = true)
protected SearchRequest searchRequest;
public SearchRequest getSearchRequest() {
return searchRequest;
}
public void setSearchRequest(SearchRequest value) {
this.searchRequest = value;
}
}
如何让我的基类实际上是通用的?
How do i make the base class actually generic?
preferably我想我的扩展类格式工作 SearchResponse&LT; E&GT;扩展SearchResponseBase&LT; E&GT;
并使用它作为一个泛型类型太
preferably i would like my extended class to work in the format SearchResponse<E> extends SearchResponseBase<E>
and use it as a generic type too.
如果我这样做保罗建议我可以得到德班:
if i do as paul suggested i can get teh class to:
@XmlRootElement(name = "searchResponse")
public class SearchResponse<E extends NameSearchResults> extends SearchResponseBase<E> {
@XmlElement(required = true)
protected SearchRequest searchRequest;
protected E searchResults;
public SearchRequest getSearchRequest() {
return searchRequest;
}
public void setSearchRequest(SearchRequest value) {
this.searchRequest = value;
}
@Override
public E getSearchResults() {
return searchResults;
}
@Override
public void setSearchResults(E mSearchResults) {
this.searchResults = mSearchResults;
}
}
有没有办法,我可以推NameSearchResults出这&LT; e延伸NameSearchResults&GT;
推荐答案
感谢@PaulBellora的帮助下,基地和扩展类都将成为抽象的巡航能力,然后一个名称执行力度,是这样的:
Thanks to @PaulBellora for the help, the base and extend class will both become abstract then haveing a Name implimentation, like this:
基本
@XmlRootElement(name = "searchResponseBase")
public abstract class SearchResponseBase<E>{
public abstract E getSearchResults();
public abstract void setSearchResults(E mSearchResults);
}
扩展的基本
@XmlRootElement(name = "searchResponse")
public abstract class SearchResponse<E> extends SearchResponseBase<E>{
public abstract SearchRequest getSearchRequest();
public abstract void setSearchRequest(SearchRequest value);
}
命名执行力度
@XmlRootElement(name = "nameSearchResponse")
public class NameSearchResponse extends SearchResponse<NameSearchResults>{
@XmlElement(required = true)
protected SearchRequest searchRequest;
protected NameSearchResults searchResults;
@Override
public NameSearchResults getSearchResults() {
return searchResults;
}
@Override
public void setSearchResults(NameSearchResults mSearchResults) {
this.searchResults = mSearchResults;
}
@Override
public SearchRequest getSearchRequest() {
return searchRequest;
}
@Override
public void setSearchRequest(SearchRequest value) {
this.searchRequest = value;
}
}
这篇关于创建通用的抽象类JAXB的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!