1

有一段时间我的脑海中有一个问题。假设我们有以下类:

public Class Person{
    String name;
    String address;
    String description;
}

public Class PersonFacade{
    String name;
    String address;
    String desc;
}

如您所见,这两个类之间的唯一区别是一个变量的名称。我的问题是编写帮助类以将一个对象的值映射到另一个对象的最佳方法是什么。假设我们有以下内容:

Person person = new Person();
person.name="name1";
person.address="address1";
person.description="description1";

我想编写一个应该执行以下操作的类(我们称它为 Transformer 类)

PersonFacade personFacade = new PersonFacade();
TransformClass.transformFrom(person, personFacade);

我想要这种TransformClass.transformFrom()方法做的是以下内容:

基于变量名称的相似性,将变量的值从“FromClass”分配给“ToClass”,所以在我们的例子中,我希望它分配personFacade.name = "name1"personFacade.address="adderss1"并且personFacade.desc = "description1"(最后一个似乎更难完成,但让我们试试)

有任何想法吗?

4

2 回答 2

3

您可以使用推土机

Dozer 是一个 Java Bean 到 Java Bean 的映射器,它递归地将数据从一个对象复制到另一个对象。通常,这些 Java Bean 将具有不同的复杂类型。

Dozer 支持简单属性映射、复杂类型映射、双向映射、隐式-显式映射以及递归映射。这包括映射集合属性,这些属性也需要在元素级别进行映射。

看看这个:http ://dozer.sourceforge.net/

这是一个很棒的 JavaBean Mapper。

这里是“入门”:

http://dozer.sourceforge.net/documentation/gettingstarted.html

于 2012-10-02T20:48:21.507 回答
1

也许您可以编写自己的Annotation类来创建类之间的关系。所以,例如

public Class Person{
    @MyAnnotation(id='name')
    String name;

    @MyAnnotation(id='addr')
    String address;

    @MyAnnotation(id='desc')
    String description;
}

public Class PersonFacade{
    @MyAnnotation(id='name')
    String name;

    @MyAnnotation(id='addr')
    String address;

    @MyAnnotation(id='desc')
    String desc;
}

然后在您的 TransformClass 中,您只需遍历注解,找到匹配项并在Reflection的帮助下设置相应的字段值。

于 2012-10-02T21:04:20.907 回答