我想使用泛型合并这两个方法,唯一的区别是造型类"ServicesBO“和"ServicesDAO”。bean的名称可以作为字符串参数传递。是否可以使用类型转换类的泛型来合并它们?
private void getFieldBO(){
ServicesBO services = (ServicesBO)appContext.getBean("ServicesBo");
List<users> list = services.getUsers();
for (users user: list)
System.out.println("BO: " + user.getName());
}
private void getFieldDAO(){
ServicesDAO services = (ServicesDAO)appContext.getBean("ServicesDAO");
List<users> list = services.getUsers();
for (users user: list)
System.out.println("DAO: " + user.getName());
}先谢谢你,恰克。
发布于 2011-08-11 07:21:08
解决这个问题的简单方法是让两个服务对象都实现一个公共接口。类似于:
public interface UserSource {
List<users> getUsers();
}然后将ServicesBO和ServicesDAO标记为实现此接口,这允许您执行以下操作:
private void getFieldProvider(String providerName){
UserSource services = (UserSource)appContext.getBean(providerName);
List<users> list = services.getUsers();
for (users user: list)
System.out.println(providerName + ": " + user.getName());
}更复杂的方法是使用反射,它允许您在不需要提供服务对象共享的接口的情况下执行此操作。例如,您可以执行以下操作:
private void getFieldProvider(String providerName){
Object services = appContext.getBean(providerName);
List<users> list = Collections.emptyList();
try {
Method method = services.getClass().getMethod("getUsers");
list = (List<users>)method.invoke(services);
}
catch (Exception e) {
e.printStackTrace();
}
for (users user: list)
System.out.println(providerName + ": " + user.getName())
}https://stackoverflow.com/questions/7018986
复制相似问题