0
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如何让代码自动检测到这一点,所以我不会为每个可能的代码DTO_TO_DAO_MAP或其他代码手动执行它......

4

1 回答 1

1

我建议使用命名约定和反射:

假设每个 DAO (FooDTO) 在同一个包中都有一个相应的 DAO (FooDAO),代码看起来像这样(免责声明 - 这不是我的想法,可能需要 tweek 或 2 来编译)

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);
}

当然,这个逻辑可以很容易地改变以适应不同的命名约定或不同的包。

于 2013-02-10T01:54:49.470 回答