Я не уверен, почему у вас просто не было бы:
class ShapeBuilderFactory {
ShapeBuilder<Square> getSquareBuilder(){...}
ShapeBuilder<Circle> getCircleBuilder(){...}
}
Редактировать
Итак, если вам действительно нужен подтип ShapeBuilder на вашей фабрике, вам нужно объявить каждый из них:
class ShapeBuilderFactory<SqB extends ShapeBuilder<Square>,
CiB extends ShapeBuilder<Circle>> {
SqB getSquareBuilder(){...}
CiB getCircleBuilder(){...}
}
Так что вам придется объявить это как:
ShapeBuilderFactory<FunnySquareBuilder, FunnyCircleBuilder> funnyShapeBuilder = ...
Но вы сможете сказать:
FunnyShapeBuilder<Square> funnySquareBuilder = funnyShapeBuilderFactory.getSquareBuilder();
Проблема, которую вы получили, заключается в том, что реализацияShapeBuilder может создавать только один тип фигуры.Вот как вы это объявили.
Если бы это был мой код, я бы использовал определение ShapeBuilderFactory
, которое я изначально написал, и создавал его с помощью забавных или обычных сборщиков.Разве смысл в том, чтобы эти интерфейсы действительно их использовали?