Je voudrais limiter les types compatibles de l'entrée d'une méthode à une collection de certaines sous-classes de classes. Cependant, je voudrais seulement permettre que le premier niveau des sous-classes soit accepté. Par exemple, la classe «forme» a une variété de sous-classes, par exemple. 'rectangle', 'cercle', 'triangle'. Maintenant, le 'rectangle' a sa propre sous-classe 'carré' alors comment limiter les collections acceptées pour accepter uniquement le niveau hiérarchique des sous-classes comprenant le rectangle, le cercle et le triangle sans accepter le carré?Limiter le type joker borné en Java à un seul niveau des sous-classes d'une classe?
0 shape
/ | \
1 rectangle circle triangle
|
2 square
Je sais que pour englober toutes les sous-classes de forme et de leurs sous-classes que je ferais ce qui suit:
public void methodName(List<? extends shape>){ ... }
Cependant, comment pourrais-je limiter à un seul niveau de sous-classes de la forme? i.e (seulement rectangle, cercle, triangle)
Réponse courte: vous ne pouvez pas. Longue réponse: vous caaaaaaaaaaaaan't, et vous ne devriez pas. –
Si vous en ressentez le besoin, vous devez prendre du recul et vous demander si l'héritage est bien la façon correcte de modéliser votre problème. Ce n'est pas spécifique aux génériques non plus, c'est l'héritage en général. Tout simplement parce que dans votre problème d'origine, tout 'A' est un' B', cela ne signifie pas nécessairement que la classe représentant 'A' devrait étendre la classe représentant' B'. – biziclop