générique Supposons que j'ai ceci:Type générique délimité par un autre
interface Shape {}
interface Square extends Shape {}
interface Circle extends Shape {}
interface ShapeBuilder<S extends Shape> {}
Je veux quelque chose comme ceci:
class ShapeBuilderFactory<SB extends ShapeBuilder> {
SB<Square> getSquareBuilder(){...}
SB<Circle> getCircleBuilder(){...}
}
Ce code ne compile pas (parce ShapeBuilder est un type brut), mais J'espère que vous comprenez l'idée. Est-il possible de faire quelque chose comme ça dans Java? Comment?
(le vrai problème est pas avec les constructeurs de formes et des usines, je cet exemple pour simplifier)
Modifier (contexte plus)
J'ai différents types de constructeurs:
interface RegularShapeBuilder<S extends Shape> extends ShapeBuilder<S> {}
interface FunnyShapeBuilder<S extends Shape> extends ShapeBuilder<S> {}
class RegularSquareBuilder extends RegularShapeBuilder<Square> {}
class FunnySquareBuilder extends FunnyShapeBuilder<Square> {}
class RegularCircleBuilder extends RegularShapeBuilder<Circle> {}
class FunnyCircleBuilder extends FunnyShapeBuilder<Circle> {}
Et je veux l'usine à faire des choses comme ceci:
ShapeBuilderFactory<FunnyShapeBuilder> funnyShapeBuilderFactory = ...;
FunnyShapeBuilder<Square> funnySquareBuilder = funnyShapeBuilderFactory.getSquareBuilder();
Qu'est-ce que vous essayez de acheive en faisant générique ShapeBuilderFactory? Évidemment, un ShapeBuilder ne peut pas produire à la fois un carré et un cercle, parce que vous avez dit qu'il ne peut produire qu'un seul type. –
J'essaye de rendre la classe d'usine capable de renvoyer différents genres de constructeurs (regularBuilder, funnyBuilder, etc.). Je veux avoir une regularShapeBuilderFactory et une funnyShapeBuilderFactory comme instances de la même classe. – Pomber
Ok, mais pourquoi ont-ils besoin d'exposer le type de constructeur qu'ils utilisent? Les différents types de constructeurs font-ils d'autres choses pour lesquelles vous auriez besoin du sous-type? –