我想到了一个接口,它声明了一种将原始分数从调查转换为特定类别的百分位值的方法,其中类别由多个不相关的枚举类型描述。所以我从这个开始:
public interface NormTable<E extends Enum<E>> {
Integer percentileForRawScore(E e, int score);
}
然后,我得到了一个实现类,例如 Foo 调查及其Subscale
枚举:
public class FooSubscaleNormTable implements NormTable<Subscale> {
public Integer percentileForRawScore(Subscale e, int score) {
// Implementation
}
}
最后,一个用于创建适当具体类的工厂类:
public class NormTableFactory {
public static <E extends Enum<E>> NormTable<E> normTableForSurveyAndType(
String surveyCode, Class<E> clazz) {
if ("Foo".equals(surveyCode) && Subscale.class.equals(clazz)) {
return (NormTable<E>) new FooSubscaleNormTable();
} else {
// ...
}
}
}
我怀疑那里的演员阵容是错误的,因为 Eclipse 将其标记为未选中,尽管让我继续。然而,构建服务器上的 Java 1.6 编译器并不满意,并将它们标记为不可转换的类型。
我是不是把工厂类的签名弄错了,还是我的整个架构看起来很可疑?我在上面注意到枚举类型是“否则不相关的”,尽管它们都代表调查中的类别,并且可以想象实现一个接口来统一它们的类型。那会有帮助吗?