抽象ファクトリ パターンに応じて、次の 2 つのインターフェイスがあります。
public interface GenericObjectInterface<T extends Number>{
public T getResult();
}
public interface AbstractFactoryInterface{
public <T extends Number> GenericObjectInterface<T> createGenericObject();
}
GenericObject を実装する抽象クラスがありますが、まだ具体的な型を認識していません (Number に対する一般的な操作のみを行います)。
public abstract class GenericAbstractClass<T extends Number> implements GenericObjectInterface<T>{ }
次に、汎用パラメーター置換を実行する一連の具象クラスの拡張があります。
public class IntegerObject extends GenericAbstractClass<Integer>{
public Integer getResult(){}
}
....
ここで、ファクトリの実装内から具象型を構築します。これは GenericObjectInterface を実装していますが、ジェネリック パラメータが失われています。
public class ConcreteFactory{
public <T extends Number> GenericObjectInterface<T> greateGenericObject(Class<T> c){
if (c.class.isInstance(Integer.class)){
IntegerObject obj = new IntegerObject();
//I would like to return obj
GenericObjectInterface<T> a = new IntegerObject(); //errror
GenericAbstractClass<T> a = new IntegerObject(); //errror
return a;
}else if (c.class.isInstance(Double.class)){
}
}
}
GenericObjectInterface を実装した obj を返したいのですが、どうすればよいかわかりません。どうすればこれを解決できますか?
私はファクトリを抽象化することに慣れていますが、ジェネリックで使用したことはありません。パターンの解釈に誤りがありますか?