Supposons que deux interfaces:usine générique avec les classes d'implémentation inconnus
public interface FruitHandler<T extends Fruit>
{
setFruit(T fruit);
T getFruit();
}
public interface Fruit
{
}
Maintenant, je veux une usine pour créer FruitHandlers
(par exemple AppleHander
, OrangeHandler
, ...), mais le FruitHandlerFactory
ne sait pas neccessary au sujet de la mise en œuvre classes des deux interfaces (comme dans java parameterized generic static factory). Le FruitHandlerFactory
devrait fonctionner de cette façon (où OrangeHandler
implémente FruitHandler
et Orange
outils Fruit
):
FruitHandlerFactory fhf = new FruitHandlerFactory<OrangeHandler,Orange>();
OrangeHandler fh = fhf.create();
Orange orange = (Orange)fh.getFruit();
Cela devrait être l'usine:
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;
}
}
où je reçois cette erreur:
The type A is not generic; it cannot be parameterized with arguments <B>
BTW: Est-il possible de rendre la méthode create()
statique?
Excellente question, et excellent extrait de code pour illustrer. – sje397