类属性复制实现

  • 实现功能
    a. 不同java 对象之间相同属性值的拷贝
  • 引用第三方jar再次外包装进行实现(commons-beanutils)
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
        <version>1.9.2</version>
        </dependency>
  • 实现源代码
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.apache.commons.beanutils.BeanUtils;

public class BeanAdapter<T,E> {
    private T destType;

    public BeanAdapter(T destType){
        if(destType == null){
            throw new NullPointerException();
        }
        this.destType = destType;
    }

    public List<T> copyProperties2List(Collection<? extends E> origElements) throws Exception{
        List<T> destList = new ArrayList<T>();

        if(origElements == null || origElements.size() == 0){
            return destList;
        }

        return (List<T>) copyProperties(destList,origElements);
    }

    public Set<T> copyProperties2Set(Collection<? extends E> origElements) throws Exception{
        Set<T> destSet = new HashSet<T>();

        if(origElements == null || origElements.size() == 0){
            return destSet;
        }

        return (Set<T>) copyProperties(destSet,origElements);
    }

    private Collection<T> copyProperties(Collection<T> dest,Collection<? extends E> origElementList) throws Exception{

        for (E element : origElementList) {
            @SuppressWarnings("unchecked")
            T destObject = (T) destType.getClass().newInstance();
            BeanUtils.copyProperties(destObject, element);
            dest.add(destObject);
        }
        return dest;
    }
}
  • 实现的反思

  1. T destType 定义是否是必须定义
T destObject = (T) destType.getClass().newInstance();

是为了创建具体的目的对象而用
2. 返回不同的Collection< T > 是否有必要在接口内部进行强制的定义,通过外部依赖的方式是不是更好

prublic Collection<T> copyProperties(Collection<T> dest,Collection<? extends E> origElementList)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值