Предположим, что два интерфейса:
public interface FruitHandler<T extends Fruit>
{
setFruit(T fruit);
T getFruit();
}
public interface Fruit
{
}
Теперь я хочу, чтобы factory создавал FruitHandlers
(например, AppleHander
, OrangeHandler
,...), но FruitHandlerFactory
не знает о необходимых классах обоих интерфейсов (например, в java параметризованный общий статический factory). FruitHandlerFactory
должен работать таким образом (где OrangeHandler
реализует FruitHandler
и Orange
реализует Fruit
):
FruitHandlerFactory fhf = new FruitHandlerFactory<OrangeHandler,Orange>();
OrangeHandler fh = fhf.create();
Orange orange = (Orange)fh.getFruit();
Это должен быть factory:
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;
}
}
Где я получаю эту ошибку:
The type A is not generic; it cannot be parameterized with arguments <B>
BTW: Можно ли сделать метод create()
статическим?