我正在尝试使用 JAXB 的自省来编组和取消编组一些用 JAXB 注释标记的现有域对象。大多数事情都按预期工作,但我在获得一个相当简单的类来序列化时遇到了很多麻烦。此类在许多 bean 上用作 @XmlElement ,看起来像:
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 仍然对 Comparable 接口感到愤怒。
public class DoubleRange extends Range<Double> {}
使用 Range 和 DoubleRange 作为 bean getter 的返回类型会产生如下异常:
java.lang.Comparable 是一个接口,JAXB 不能处理接口。 此问题与以下位置有关: 在 java.lang.Comparable 在受保护的 java.lang.Comparable com.controlpath.util.Range.start 在 example.util.Range 在 example.util.DoubleRange 在公共 example.util.DoubleRange example.domain.SomeBean.getRange() 在 example.domain.SomeBean
我意识到在大多数情况下 List<T> 和 Map<T, U> 只能工作,因为 JAXB 规范对这些类型在 bean 上遇到时有特殊规定,但是有什么方法可以将我想要的内容传达给 JAXB 自省引擎而不必用非泛型字段重新实现范围?