public class DAOHelper {
private static final Map<Class, Class> DTO_TO_DAO_MAP;
private static final Map<Class, Class> ACDTO_TO_ACDAO_MAP;
static {
DTO_TO_DAO_MAP = new HashMap<Class, Class>();
DTO_TO_DAO_MAP.put(EmployerDTO.class, EmployerDAO.class);
ACDTO_TO_ACDAO_MAP = new HashMap<Class, Class>();
ACDTO_TO_ACDAO_MAP.put(AcademicDTO.class, AcademicDAO.class);
}
public static BaseDAO<?> getDAO(Class dtoClass) {
BaseDAO<?> dao = null;
Class daoClass = ACDTO_TO_ACDAO_MAP.get(dtoClass); //here
//rest of code here
}
Class daoClass = ACDTO_TO_ACDAO_MAP.get(dtoClass);
在这个代码比例中,我可以如何让代码自动检测,而不是ACDTO_TO_ACDAO_MAP
,所以我不会为每个代码手动执行,因为它可能是{{1}或其他人......
答案 0 :(得分:1)
我建议使用命名约定和反射:
假设每个DAO(FooDTO)在同一个包中都有相应的DAO(FooDAO),代码看起来就像这样(免责声明 - 这是我的头脑,可能需要一个tweek或2来编译)< / p>
public static BaseDAO<?> getDAO(Class dtoClass) {
String dtoClassName = dtoClass.getName();
String daoClassName = dtoClassName.replaceAll("DTO$", "DAO");
Class daoClass = Class.forName(daoClassName);
retrun daoClass.newInstance(daoClass);
}
当然,这个逻辑可以很容易地改变,以适应不同的命名约定或不同的包。