【发布时间】:2012-05-27 07:45:04
【问题描述】:
我想到了一个接口,它声明了一种将调查中的原始分数转换为特定类别的百分位值的方法,其中类别由多个其他不相关的枚举类型描述。所以我从这个开始:
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 编译器并不满意,并将它们标记为不可转换的类型。
是我在工厂类中的签名有误,还是我的整个架构看起来很可疑?我在上面注意到枚举类型是“否则不相关的”,尽管它们都代表调查中的类别,并且可以想象实现一个接口来统一它们的类型。这会有帮助吗?
【问题讨论】:
-
Enum无法扩展。你的代码不会编译。 -
看看如何在枚举上定义接口:stackoverflow.com/questions/2709593/…
标签: java generics interface enums