Java 在Dozer中映射具有抽象类型成员的类时发生实例化异常
我是推土机新手,我正在尝试为ClassA和ClassB创建一个地图Java 在Dozer中映射具有抽象类型成员的类时发生实例化异常,java,dozer,Java,Dozer,我是推土机新手,我正在尝试为ClassA和ClassB创建一个地图 public class ClassA { ClassC c; public ClassC getC() { return c; } public void setC(ClassC c) { this.c = c; } } public class ClassB { private String x; public String get
public class ClassA {
ClassC c;
public ClassC getC() {
return c;
}
public void setC(ClassC c) {
this.c = c;
}
}
public class ClassB {
private String x;
public String getX() {
return x;
}
public void setX(String x) {
this.x = x;
}
}
public abstract class ClassC {
private String x;
public String getX() {
return x;
}
public void setX(String x) {
this.x = x;
}
}
public class ClassD extends ClassC {
}
我尝试了下面的映射
<mapping>
<class-a>ClassA</class-a>
<class-b>ClassB</class-b>
<field>
<a>c.x</a>
<b>x</b>
</field>
<mapping>
甲级
B类
c、 x
x
classC是一个抽象类,ClassD是一个具体类。当我映射A->B时没有问题,但是当我映射B->A时,我得到了实例化异常。
我怀疑推土机试图实例化抽象类classC。有任何属性告诉推土机使用ClassD吗?请帮忙
[EDIT1]-添加了完整的类声明。您添加的这条评论是正确的 “classC是一个抽象类,ClassD是一个具体类。当我映射a->B时没有问题,但是当我映射B->a时,我得到了实例化异常。我怀疑推土机试图实例化抽象类classC。” 这有点像是瞎猜,但在阅读了推土机支持页面和以下问题后,我会尝试一下:。我可能不是100%正确,但我很确定这需要符合这些原则
<mapping>
<class-a>ClassA</class-a>
<class-b>ClassB</class-b>
<field>
<a>c.x</a>
<b>x</b>
<a-hint>ClassD</a-hint>
</field>
<mapping>
甲级
B类
c、 x
x
D类
好的,明白了。您需要使用create方法
<mapping>
<class-a create-method="ClassAFactory.createClassA">ClassA</class-a>
<class-b>ClassB</class-b>
<field>
<a>c.x</a>
<b>x</b>
</field>
<mapping>
public class ClassAFactory {
public static ClassA createClassA(){
ClassA classA = new ClassA();
classA.setC(new ClassD());
return classA;
}
}
甲级
B类
c、 x
x
公共类工厂{
公共静态类A createClassA(){
ClassA ClassA=新的ClassA();
setC(新的ClassD());
返回A类;
}
}
您的类中有getter/setter吗?另外,你能提供错误的堆栈跟踪吗?嗨,是的,我有getter/setter。这是stacktrace的链接。你能提供类的代码吗?stacktrace提示目标有问题。我添加了完整的类定义。我已经尝试过了,但它不起作用。如果我是正确的,c.x是一个字符串,所以提示将不起作用。请看我的答案。好的,不用担心。感谢您提供的解决方案,我们将努力记住这一点,以备下次使用!