У меня есть следующие 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)){
}
}
}
Я хотел бы вернуть obj, который реализует GenericObjectInterface, но я не знаю, как я могу это сделать.
как я могу решить это?
Я привык абстрагировать фабрику, но я никогда не использовал ее с генериками. Я делаю некоторые ошибки в интерпретации паттерна?