私は、調査からの生のスコアを特定のカテゴリのパーセンタイル値に変換するメソッドを宣言するインターフェースを念頭に置いています。カテゴリは、関連のない複数の列挙型によって記述されます。だから私はこれから始めました:
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 コンパイラはまったく問題なく、変換できない型としてフラグを立てます。
ファクトリ クラスのシグネチャが間違っているのでしょうか、それともアーキテクチャ全体が怪しいのでしょうか? 上記の列挙型は「そうでなければ無関係」ですが、それらはすべて調査内のカテゴリを表し、おそらくそれらの型を統一するためのインターフェースを実装できることに注意してください。それは役に立ちますか?