我在jar Animal
中有一个不依赖于JAXB的接口Cat
和许多实现(Dog
,Sheep
和animals-core
) 。然后我有一个jar animals-jaxb
,为这些类提供JAXB绑定。
我想写的是:
public class AnimalAdapter extends XmlAdapter<String, Animal> {
@Override
public Animal unmarshal(String content) {
switch (fieldClass) {
case Cat.class: return new Cat(content);
case Dog.class: return new Dog(content);
case Sheep.class: return new Sheep(content);
default: throw new IllegalStateException(
"propertyClass (" + propertyClass + ") not supported");
}
}
@Override
public String marshal(Animal a) {
return a.toContent();
}
}
这将使我的动物框架的用户很容易配置:
public class Person {
@XmlJavaTypeAdapter(AnimalAdapter.class)
private Cat cat; // fieldClass is Cat.class
@XmlJavaTypeAdapter(AnimalAdapter.class)
private Dog dog; // fieldClass is Dog.class
}
上面代码的问题是缺少fieldClass
:对于XmlAdapter
实例,我找不到一种方法来检索它所绑定的字段类型。这可能吗?