在 java 中复制一个模型对象
Copy a model object in java
如果我想在 java 中复制模型对象,最好的方法是什么?因为在 java 中为嵌套对象编写 copy() 函数变得很麻烦。我只是想避免这种情况。作为捷径,我使用这种方法。
public static <T> T copy(T model, Class<T> tClass) throws Exception {
final ObjectMapper objectMapper = new ObjectMapper();
final byte[] bytes = objectMapper.writeValueAsBytes(model);
final T copy = objectMapper.readValue(bytes, tClass);
return copy;
}
然后像这样使用它。
final McTrack copy = copy(new McTrack(), McTrack.class);
我制作了一个实用函数 copy(),它接受一个模型对象和 returns 它的一个副本。首先,我将整个对象序列化为 json,然后再次反序列化以制作副本。但我不确定它是否真的有效。有没有更好的方法来复制普通的旧 java 对象。
您可以使用 Object.clone()。有一些反对意见,但它是可用的。当心,这是一个浅层克隆。这取决于您要克隆的class,浅克隆是否足够。
另请参阅此处以获得深度克隆建议:Deep clone utility recomendation
你可以使用方法:
BeanUtils.copyProperties(aValue, aLocal);
在 apache 中 commons-beanutils jar
点击此处commons-beanutils访问apache文档
您还可以使用 Dozer 库:http://dozer.sourceforge.net/
您可以像这样轻松地将整个 POJO 复制到另一个:
Mapper mapper = new DozerBeanMapper();
DestinationObject destObject = mapper.map(sourceObject, DestinationObject.class);
真正有用的是什么,您可以像这样配置自己的映射:
<mapping>
<class-a>yourpackage.yourSourceClassName</class-a>
<class-b>yourpackage.yourDestinationClassName</class-b>
<field>
<a>yourSourceFieldName</a>
<b>yourDestinationFieldName</b>
</field>
</mapping>
此外,您可以使用不同的技术来复制对象、使用自定义工厂、特殊 getters/setters 和许多有用的东西:http://dozer.sourceforge.net/documentation/mappings.html
除了上面提到过的,你也可以试试ModelMapper. No configuration is required. In cases where it is important, there are 3 matching strategies你可以用
ModelMapper modelMapper = new ModelMapper();
OrderDTO orderDTO = modelMapper.map(order, OrderDTO.class);
如果我想在 java 中复制模型对象,最好的方法是什么?因为在 java 中为嵌套对象编写 copy() 函数变得很麻烦。我只是想避免这种情况。作为捷径,我使用这种方法。
public static <T> T copy(T model, Class<T> tClass) throws Exception {
final ObjectMapper objectMapper = new ObjectMapper();
final byte[] bytes = objectMapper.writeValueAsBytes(model);
final T copy = objectMapper.readValue(bytes, tClass);
return copy;
}
然后像这样使用它。
final McTrack copy = copy(new McTrack(), McTrack.class);
我制作了一个实用函数 copy(),它接受一个模型对象和 returns 它的一个副本。首先,我将整个对象序列化为 json,然后再次反序列化以制作副本。但我不确定它是否真的有效。有没有更好的方法来复制普通的旧 java 对象。
您可以使用 Object.clone()。有一些反对意见,但它是可用的。当心,这是一个浅层克隆。这取决于您要克隆的class,浅克隆是否足够。
另请参阅此处以获得深度克隆建议:Deep clone utility recomendation
你可以使用方法:
BeanUtils.copyProperties(aValue, aLocal);
在 apache 中 commons-beanutils jar
点击此处commons-beanutils访问apache文档
您还可以使用 Dozer 库:http://dozer.sourceforge.net/
您可以像这样轻松地将整个 POJO 复制到另一个:
Mapper mapper = new DozerBeanMapper();
DestinationObject destObject = mapper.map(sourceObject, DestinationObject.class);
真正有用的是什么,您可以像这样配置自己的映射:
<mapping>
<class-a>yourpackage.yourSourceClassName</class-a>
<class-b>yourpackage.yourDestinationClassName</class-b>
<field>
<a>yourSourceFieldName</a>
<b>yourDestinationFieldName</b>
</field>
</mapping>
此外,您可以使用不同的技术来复制对象、使用自定义工厂、特殊 getters/setters 和许多有用的东西:http://dozer.sourceforge.net/documentation/mappings.html
除了上面提到过的,你也可以试试ModelMapper. No configuration is required. In cases where it is important, there are 3 matching strategies你可以用
ModelMapper modelMapper = new ModelMapper();
OrderDTO orderDTO = modelMapper.map(order, OrderDTO.class);