Question

pour faire suite à ma question précédente Avoir une fonction avec des bornes génériques combinées telles que:

<T extends Foo & Bar> void doStuff(T argument) {
  //do stuff wich should only be done if arguments is both foo and bar
}

Etant donné que cela ne peut pas être lancé depuis un objet non spécifié, vous devez connaître certains objets qui implémentent réellement ces interfaces. il me semble qu'avoir besoin de connaître le type spécifique de l'argument d'objet à passer à doStuff (T a) est une violation de la loi de Demeter.

La fonction ne spécifie pas le besoin de connaître la classe réelle (il pourrait y en avoir beaucoup de différentes), et je ne veux vraiment pas le savoir car connaître cette classe augmente la dépendance de ma base de code.

utilise-t-il ces limites comme anti-modèle? et si oui, comment l’éviter?

le scénario a impliqué une interface spécifiant que l'objet est persistant et l'autre objet spécifié ayant une entité associée. la fonction doStuff (T a) a persisté dans l'entité associée lorsqu'elle a été persistée. toutefois, les entités non persistantes peuvent également avoir une entité associée, mais ne doivent pas être traitées par la fonction doStuff (T a)

Pas de solution correcte

Autres conseils

Je ne considérerais pas les limites génériques combinées comme un anti-motif. Au moins, je les utilise dans mon code. Par exemple, l'exemple de code suivant recherche la plus grande instance Number dans une collection à l'aide de compareTo à partir de l'interface Comparable:

<T extends Number & Comparable<T>> T max(Collection<T> numbers)
  

il me semble que le fait de connaître le type spécifique de l'argument d'objet à transmettre à doStuff (T a) constitue une violation de la loi de Demeter

Je ne suis pas d'accord. Je ne vois pas comment

T<? extends Foo & Bar> void doStuff(T argument) 

nécessite une connaissance supplémentaire de l'argument à transmettre, puis

T<? extends Foo> void doStuff(T argument) 

Ou encore plus que juste

void doStuff(T argument) 

Dans tous les cas, vous devez savoir quelque chose sur l'argument et je ne pense pas que les premiers cas exigent plus de connaissances que les autres, car ils ont deux identificateurs.

L’anti-motif est en train d’être lancé.

Cependant, le jeu de jambes générique peut être déroutant pour les programmeurs non expérimentés. L’utilisation de tels types et méthodes devrait être beaucoup plus simple que leur mise en oeuvre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top