Lag / latence? J'appelle BS à ce sujet. Il devrait y avoir exactement zéro frais généraux de cette pratique. ( Edit: il a été souligné dans les commentaires que cela peut en fait empêcher les optimisations effectuées par la machine virtuelle HotSpot. Je ne connais pas suffisamment l'implémentation de la machine virtuelle pour confirmer ou infirmer cela. Je me suis basé mon commentaire sur C ++. implémentation de fonctions virtuelles.)
Il y a une surcharge de code. Vous devez créer tous les constructeurs de la classe de base souhaitée, en transmettant leurs paramètres.
Je ne vois pas non plus cela comme un anti-modèle, en soi. Cependant, je le vois comme une opportunité manquée. Au lieu de créer une classe qui dérive la classe de base uniquement pour renommer, pourquoi ne pas créer une classe contenant la collection et offrant une interface améliorée spécifique à la casse? Votre cache de widgets doit-il vraiment offrir l'interface complète d'une carte? Ou devrait-il plutôt offrir une interface spécialisée?
De plus, dans le cas de collections, le modèle ne fonctionne tout simplement pas avec la règle générale d’utilisation d’interfaces, et non d’implémentations - c’est-à-dire que dans le code de collection simple, vous créez un HashMap<String, Widget>
, puis vous l’assignez à une variable de type Map<String, Widget>
. Votre WidgetCache
ne peut pas s'étendre Map<String, Widget>
, car c'est une interface. Il ne peut s'agir d'une interface qui étend l'interface de base, car elle HashMap<String, Widget>
n'implémente pas cette interface, pas plus que toute autre collection standard. Et bien que vous puissiez en faire une classe qui s'étend HashMap<String, Widget>
, vous devez ensuite déclarer les variables comme WidgetCache
ou Map<String, Widget>
, et le premier vous perd la flexibilité nécessaire pour substituer une collection différente (peut-être la collection de chargement paresseux de certains ORM), tandis que le second défait le point. d'avoir la classe.
Certains de ces contrepoints s'appliquent également à la classe spécialisée proposée.
Ce sont tous des points à considérer. Ce peut être ou ne pas être le bon choix. Dans les deux cas, les arguments proposés par votre collègue ne sont pas valides. S'il pense que c'est un anti-modèle, il devrait le nommer.