BeanUtils.copyProperties(hotel,hotelDoc) 和 HotelDoc hotelDoc = new HotelDoc(hotel) 区别

文章对比了Java中两种对象属性拷贝的方法:ApacheCommonsBeanUtils库的BeanUtils.copyProperties()工具方法和使用构造函数。BeanUtils.copyProperties()适合批量属性拷贝,处理属性名和类型可能不一致的情况,而构造函数拷贝更精确,但需手动处理类型转换,适用于属性严格匹配的情况。
摘要由CSDN通过智能技术生成

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) 更加精确,不需要额外的依赖库,但在属性名和类型不一致的情况下需要手动编写转换代码。需要根据具体场景选择使用哪种方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值