如何根据传递的类类型设计处理Java集合的方法?

时间:2016-01-06 07:15:48

标签: java generics collections apache-commons-dbutils

我查询数据库并获得一个Bean类,它返回ArrayList<Object>。但是我

public static ArrayList<Object> getBeanList(){

    String sql = "....";

    ArrayList<Object> beanList = DBUtil.getBeanList(sql, new ConfDetailsBean());

    return beanList;
}

在上面的helper方法的调用函数中,我必须先将ArrayList<Object>强制转换为必需的类才能使用beanList:

ArrayList<Object> beanObjList = getBeanList();  //helpermethod call

ArrayList<ConfDetailsBean> confDetailsBeanList = new ArrayList<ConfDetailsBean>();

for(Object bean: beanList)
    confDetailsBeanList.add((ConfDetailsBean) bean);

现在,在辅助方法DBUtil.getBeanList(sql, new ConfDetailsBean());中,ConfDetailsBean是硬编码的。

如何使helper方法通用,以便我可以传递任何Bean对象?

1 个答案:

答案 0 :(得分:2)

您应该引入一个(方法范围的)类型参数T并显式传递Class<T>,以便您可以在运行时实例化T

此外,返回List代替ArrayList可以为您提供更大的灵活性:

public static List<T> getBeanList(Class<T> clazz) {

    String sql = "....";

    List<T> beanList = DBUtil.getBeanList(sql, clazz);

    return beanList;
}

有了这个,你的代码会缩短一点:

List<ConfDetailsBean> confDetailsBeanList = getBeanList(ConfDetailsBean.class);