BeanUtils.copyProperties()
和 HotelDoc hotelDoc = new HotelDoc(hotel)
都是Java中的对象属性拷贝方式,但实现原理和应用场景有所不同。
BeanUtils.copyProperties()
是Apache Commons BeanUtils库中提供的一个工具方法,可以快速地将源对象的属性拷贝到目标对象中。该方法适用于两个对象属性名相同且类型相同的情况,可以方便地进行批量属性拷贝,避免手动编写一堆赋值语句。示例代码:
HotelDoc hotelDoc = new HotelDoc();
BeanUtils.copyProperties(hotel, hotelDoc);
在上述示例中,BeanUtils.copyProperties()
方法会将hotel
对象的属性拷贝到新创建的hotelDoc
对象中。
而HotelDoc hotelDoc = new HotelDoc(hotel)
是利用HotelDoc
的构造函数来创建一个新的对象,并将hotel
对象的属性作为参数传递给构造函数。这种方式必须手动编写构造函数,并且要求两个对象的属性类型必须相同,否则可能会出现转换异常。示例代码:
@Data
@TableName("tb_hotel")
public class Hotel {
@TableId(type = IdType.INPUT)
private Long id;
private String name;
private String longitude;
private String latitude;
}
@Data
@NoArgsConstructor //产生无参的构造方法
public class HotelDoc {
private Long id;
private String name;
private String location;
//自己编写了有参的构造方法后,默认无参的需要自己写(此处使用lombok生成)
public HotelDoc(Hotel hotel) {
this.id = hotel.getId();
this.name = hotel.getName();
this.location = hotel.getLatitude() + ", " + hotel.getLongitude();
}
}
HotelDoc hotelDoc = new HotelDoc(hotel);
在上述示例中,HotelDoc hotelDoc = new HotelDoc(hotel)
会创建一个新的HotelDoc
对象,并将hotel
对象的属性拷贝到该对象中。
总的来说,BeanUtils.copyProperties()
更加灵活,可以处理不完全一致的属性名和类型的情况,适用于批量属性拷贝;而 HotelDoc hotelDoc = new HotelDoc(hotel)
更加精确,不需要额外的依赖库,但在属性名和类型不一致的情况下需要手动编写转换代码。需要根据具体场景选择使用哪种方式。