【发布时间】:2018-02-22 14:46:34
【问题描述】:
public enum Dictionaries {
FIRST_DICTIONARY(FirstDictionary.class),
SECOND_DICTIONARY(SecondDictionary.class);
private Class<? extends DictionaryModel> clazz;
private Dictionary(Class<? extends DictionaryModel> clazz) {
this.clazz = clazz;
}
public Class<? extends DictionaryModel> clazz() {
return this.clazz;
}
}
我有这个枚举。 FirstDictionary 和 SecondDictionary 实现了 DictionaryModel,这是一个标记接口,用于使用此解决方案。
现在我很想这样做:
Class<FirstDictionary> clazz = Dictionaries.FIRST_DICTIONARY.clazz();
这种设计显然是不可能的,我想不出实现这一点的方法。有没有办法做到这一点?我可以访问整个代码,所以我可以修改所有内容,包括界面(甚至删除它)。
我简化了所有这些,关键是每个字典都是一个数据库表,我为它们有一个公共 DAO(而不是每个字典的 DAO),现在我必须转换我想要的每次读取的结果避免。我知道通用 DAO 不是一个好主意(或根本不是 DAO)。
Optional<DictionaryModel> entity = dao.getByValue(Dictionaries.FIRST_DICTIONARY, value);
对于任何动态转换,在 DAO 本身或 clazz() 方法中,我似乎都没有办法。我觉得我在这里遗漏了一些明显的东西。
我很欣赏任何想法,甚至完全改变设计。
【问题讨论】: