我试图使用JAXB的内省来编组并且取消对一些现有的使用JAXB标注标记的域对象的解析。大多数事情都按预期工作,但是我得到一个相当简单的类来序列化时遇到了一些麻烦。该类被用作对一些豆类的@XmlElement看起来类似:JAXB编组和泛型
public class Range<E extends Comparable<E>> implements Serializable {
protected boolean startInclusive, endInclusive;
protected E start, end;
public Range(){
startInclusive = endInclusive = true;
}
public boolean contains(E value){...}
public E getEnd() {
return end;
}
public void setEnd(E end) {
this.end = end;
}
public boolean isEndInclusive() {
return endInclusive;
}
public void setEndInclusive(boolean endInclusive) {
this.endInclusive = endInclusive;
}
public E getStart() {
return start;
}
public void setStart(E start) {
this.start = start;
}
public boolean isStartInclusive() {
return startInclusive;
}
public void setStartInclusive(boolean startInclusive) {
this.startInclusive = startInclusive;
}
}
我试图做到以下几点,没有成功,JAXB是还在生的界面相媲美。
public class DoubleRange extends Range<Double> {}
同时使用范围和DoubleRange作为返回类型为bean的getter的收益率的异常,如:
java.lang.Comparable is an interface, and JAXB can't handle interfaces. this problem is related to the following location: at java.lang.Comparable at protected java.lang.Comparable com.controlpath.util.Range.start at example.util.Range at example.util.DoubleRange at public example.util.DoubleRange example.domain.SomeBean.getRange() at example.domain.SomeBean
我意识到,在大多数情况下列表<牛逼>和地图< T,U >只工作因为JAXB规范在遇到bean时对这些类型有特殊规定,但是有什么方法可以将我想要的内容传达给JAXB自省引擎,而无需使用非泛型字段来实现范围的重新实现?
我想了解为什么JAXB很难受,并避免大量的自定义编组代码(因为我相信我会击中这在将来的某个时刻再次发生,可能在更复杂的对象上)。但从技术上讲,这是一个答案,如果没有其他人有更好的答案,我会在几天内将其标记为这样。谢谢=) – 2009-05-06 14:28:53