如何根据传递的 class 类型设计处理 Java 中的集合的方法?
How to design method handling a Collection in Java based on the class type passed?
我查询一个数据库并得到一个 Bean class,returns ArrayList<Object>
。不过我
public static ArrayList<Object> getBeanList(){
String sql = "....";
ArrayList<Object> beanList = DBUtil.getBeanList(sql, new ConfDetailsBean());
return beanList;
}
在上述辅助方法的调用函数中,我必须先将 ArrayList<Object>
转换为所需的 class 才能使用 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 是硬编码的。
如何使辅助方法通用,以便我可以传递任何 Bean 对象?
您应该引入一个 (method-scoped) type-parameter 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);
我查询一个数据库并得到一个 Bean class,returns ArrayList<Object>
。不过我
public static ArrayList<Object> getBeanList(){
String sql = "....";
ArrayList<Object> beanList = DBUtil.getBeanList(sql, new ConfDetailsBean());
return beanList;
}
在上述辅助方法的调用函数中,我必须先将 ArrayList<Object>
转换为所需的 class 才能使用 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 是硬编码的。
如何使辅助方法通用,以便我可以传递任何 Bean 对象?
您应该引入一个 (method-scoped) type-parameter 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);