java - 在 Dozer 中映射具有抽象类型成员的类时出现 InstantiationException

标签 java dozer

我是推土机的新手,我正在尝试为 ClassA 和 ClassB 创建 map

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>

classC 是抽象类,ClassD 是具体类。当我映射 A->B 时没有问题,但是当我映射 B->A 时,我得到 InstantiationException。 我怀疑推土机正在尝试实例化抽象类 classC。任何属性告诉推土机使用 ClassD?请帮忙。

[EDIT1] - 添加了完整的类声明。

最佳答案

您添加的这条评论是对的。

"classC is an abstract class and ClassD is a concrete. When I map A->B there is no problem but when I map B->A, I'm getting InstantiationException. I suspect that the dozer is trying to instantiate abstract class classC."

这有点摸不着头脑,但在阅读推土机支持页面和这个问题后我会尝试:How to map a field with type as an abstract class with dozer? .我可能不是 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>

关于java - 在 Dozer 中映射具有抽象类型成员的类时出现 InstantiationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21378017/

相关文章:

java - 创建用于将所有视频设置为相同大小并添加水印的 FFMPEG 命令?

java - 映射 Avro 模型

mapping - 什么时候使用绘图框架,什么时候手动绘图?

java - 推土机 : primitive int -1 value to null object mapping

java - 为 JPA 存储库编写 junit

java - 使用java比较字符串的替代字符的最快方法是什么?

java - 在java中提取两个字符串之间的字符串

空对象引用上的 java.lang.nullpointerException : Attempt to invoke void android. widget.EditText.setText(java.lang.CharSequence)

java - Dozer Mapper 未映射组成的嵌套字段

java - Dozer 映射到现有对象非空字段