Java,List<T>泛型添加问题

前言:

今天做Hbase数据封装,在将查询结果Result转bean的时候使用到了泛型,将T直接添加到list中,发现一直是重复元素,代码如下:

public <T> List<T> queryScan(T obj, Map<String, String> param){
        List<T> objs = new ArrayList<T>();
        try {
            String tableName = getORMTable(obj);
            if (StringUtils.isBlank(tableName)) {
                return null;
            }
            Table table = HconnectionFactory.connection.getTable(TableName.valueOf(tableName));
            Scan scan = new Scan();
            for (Map.Entry<String, String> entry : param.entrySet()){
                Filter filter = new SingleColumnValueFilter(Bytes.toBytes(entry.getKey()), null, CompareFilter.CompareOp.EQUAL, Bytes.toBytes(entry.getValue()));
                scan.setFilter(filter);
            }
            ResultScanner scanner = table.getScanner(scan);
            for (Result result : scanner) {
                T bean = HBaseBeanUtil.resultToBean(result, obj);
                objs.add(bean);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return objs;
    }

解决方法:

因为泛型不能初始化,也不能clone,所以需要用到apache的bean工具包BeanUtils,用来做对象clone,然后再添加到list就没有问题了。关键代码如下:

for (Result result : scanner) {
      T beanClone = (T)BeanUtils.cloneBean(HBaseBeanUtil.resultToBean(result, obj));
      objs.add(beanClone);
}

猜你喜欢

转载自my.oschina.net/u/2489726/blog/1785364
今日推荐