Générique de l'usine avec des inconnus de la mise en œuvre des classes

Supposons deux interfaces:

public interface FruitHandler<T extends Fruit>
{
    setFruit(T fruit);
    T getFruit();
}

public interface Fruit
{
}

Maintenant, je veux une usine à créer FruitHandlers (par exemple AppleHander, OrangeHandler, ...), mais le FruitHandlerFactory ne sais pas nécessaire sur la mise en œuvre de classes des deux interfaces (comme dans java paramétrable générique statique usine). Le FruitHandlerFactory devrait fonctionner de cette manière (où OrangeHandler implémente FruitHandler et Orange implémente Fruit):

FruitHandlerFactory fhf = new FruitHandlerFactory<OrangeHandler,Orange>();
OrangeHandler fh = fhf.create();
Orange orange = (Orange)fh.getFruit();

Ce 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ù j'obtiens cette erreur:

The type A is not generic; it cannot be parameterized with arguments <B>

BTW: Est-il possible de faire la create() méthode statique?

  • Excellente question, et un grand fragment de code pour illustrer.
InformationsquelleAutor Thor | 2011-05-23