Supongamos dos interfaces:fábrica genérico con clases de implementación desconocidos
public interface FruitHandler<T extends Fruit>
{
setFruit(T fruit);
T getFruit();
}
public interface Fruit
{
}
Ahora quiero una fábrica para crear FruitHandlers
(por ejemplo AppleHander
, OrangeHandler
, ...), pero el FruitHandlerFactory
no sabe lo necesite acerca de la implementación clases de ambas interfaces (como en java parameterized generic static factory). El FruitHandlerFactory
debería funcionar de esta manera (donde OrangeHandler
implementa FruitHandler
y Orange
implementos Fruit
):
FruitHandlerFactory fhf = new FruitHandlerFactory<OrangeHandler,Orange>();
OrangeHandler fh = fhf.create();
Orange orange = (Orange)fh.getFruit();
Esta debe ser la fábrica:
public class FruitHandlerFactory<A extends FruitHandler, B extends Fruit>
{
public FruitHandler create()
{
FruitHandler<Fruit> fh = new A<B>(); //<--- ERROR
fh.setFruit(new B());
return fh;
}
}
Dónde consigo este error:
The type A is not generic; it cannot be parameterized with arguments <B>
BTW: ¿Es posible hacer que el método create()
sea estático?
Excelente pregunta y gran fragmento de código para ilustrar. – sje397