Java,List泛型添加問題

前言:

今天作Hbase數據封裝,在將查詢結果Result轉bean的時候使用到了泛型,將T直接添加到list中,發現一直是重複元素,代碼以下:apache

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);
}
相關文章
相關標籤/搜索