Salut,

Envoyé par
behess
c'est bien ce que j'avais compris (et que j'ai aussi implémenté en ce sens sur la base de tes conseils) je me permets juste quelques remarques sur ton implémentation (mais tu as fait ça vite fait) :
En effet.

Envoyé par
behess
- j'avais supposé une délégation d'interface, mais ton approche est intéressante
Peu importe, ça marcherait pareil.

Envoyé par
behess
- d'où sort ce new B() ? dans l'idéal le délègué est passé par constructeur
Dans l'idéal ca pourrait interessant de n'avoir pas d'instance et d'injecter le délégué et/ou le passer par constructeur mais peut importe cela ne changerai rien.

Envoyé par
behess
- tu n'as qu'un constructeur par défaut ; quid d'un vrai constructeur avec ta factory ?
C'est quoi le problème ? On pourrait compier les constructeurs vers le délégué, on peut également invoquer un constructeur ayant des paramètres avec de la reflexion.

Envoyé par
behess
- être obligé de passer par une factory, en mode classe utilitaire en plus, c'est pas userfriendly. c'est déjà pas si mal, mais ça ne me plait pas trop
On pourrait se passer de la factory en overridant le classloader system il me semble (j'ai eu à le faire). Sinon si tu préfère tu peux toujours avoir :
A a = new A_WithDelegation();
Pour ma part je n'aime pas rendre visible des types qui ne sont pas présent avant la compilation, et mon code ne pose pas de problèmes de completion même sans configuration de processor au niveau de l'IDE.

Envoyé par
behess
La conclusion disait simplement que faire une delegate userfriendly c'est pas possible : on peut toujours faire du delegate avec annotations mais c'est trop gras pour être assez pratique. Mais ça reste intéressant ! La je n'ai plus le temps d'approfondir, mais si tu arrives a quelque chose de finalisé, tiens moi au courant, sinon je me repencherai dessus dans quelques temps.
J'ai pris le temps d'écrire ca très rapidement hier soir, tu te doutes bien que j'ai du travail et que je ne peux pas m'occuper de "de faire un code source full ok, productisé & co".
Si ca t'interesse de polir/améliorer c'est à toi de jouer 

Envoyé par
behess
Edit: un truc me chiffonne en fait : si je veux étendre A (hors délégation), comment je fais ?
1 2
| A2 extends A
A_WithDelegation extends A2 |
Rien ne t'empêche de déterminer la première classe de ta hiérarchie qui délègue et la dernière.
Rien ne t'empêche non plus de créer une annotation facultative sur un type qui permet de customiser ce comportement.
Comme tu le vois (ou tu le sait), développer de la lib/framework est compliqué car ton utilisateur est un développeur et il sera tenté de faire n'importe quoi, il faut donc penser à tout et prévoir le plus de cas possible pour pas que ca chie/bride le développeur.
Néanmoins c'est le jeu et il faut avancer petit à petit et régler les problèmes les uns derrières les autres à base de test unitaire pour éviter les régressions.
Je n'ai pas vu de truc "bloquant" dans ce que tu m'a dit, le sucre que tu veux poser par dessus ou les features/use case que tu m'a donné plus haut ne sont que des implémentations supplémentaires.
Courage
Partager