java中的对象拷贝(包括BeanUtils和Mapstruct)
在Java中,对象的复制可以通过不同的方式实现,包括使用BeanUtils
工具类和MapStruct
。以下是两种方法的示例代码:
使用BeanUtils
复制对象:
import org.springframework.beans.BeanUtils;
public class ObjectCopier {
public static void main(String[] args) {
SourceObject source = new SourceObject();
source.setProperty1("Value1");
source.setProperty2(2);
DestinationObject destination = new DestinationObject();
BeanUtils.copyProperties(source, destination);
// destination 现在包含 source 的属性值
}
}
class SourceObject {
private String property1;
private int property2;
// getters and setters
}
class DestinationObject {
private String property1;
private int property2;
// getters and setters
}
使用MapStruct
复制对象:
首先,需要添加MapStruct
依赖到项目中。
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>版本号</version>
</dependency>
然后,创建一个映射器接口:
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface ObjectMapper {
ObjectMapper INSTANCE = Mappers.getMapper(ObjectMapper.class);
@Mapping(source = "property1", target = "property1")
@Mapping(source = "property2", target = "property2")
DestinationObject sourceToDestination(SourceObject source);
}
public class ObjectCopier {
public static void main(String[] args) {
SourceObject source = new SourceObject();
source.setProperty1("Value1");
source.setProperty2(2);
DestinationObject destination = ObjectMapper.INSTANCE.sourceToDestination(source);
// destination 现在包含 source 的属性值
}
}
class SourceObject {
private String property1;
private int property2;
// getters and setters
}
class DestinationObject {
private String property1;
private int property2;
// getters and setters
}
在这两种方法中,BeanUtils
是Spring框架的一部分,而MapStruct
是一个代码生成工具,它使用注解处理方法映射,并且在编译时生成高效的代码。两者都可以用于对象的浅复制,但MapStruct
提供了类型检查和编译时检验,并且生成的代码更加优化。
评论已关闭