Automatiquement de déléguer toutes les méthodes d'une classe java

Dire que j'ai une classe avec beaucoup de méthodes publiques:

public class MyClass {

    public void method1() {}
    public void method2() {}
    (...)
    public void methodN() {}

}

Maintenant, je voudrais créer un wrapper classe qui permettrait de déléguer toutes les méthodes pour enveloppée d'instance (délégué):

public class WrapperClass extends MyClass  {
    private final MyClass delegate;

    public WrapperClass(MyClass delegate) {
        this.delagate = delegate;
    }

    public void method1() { delegate.method1(); }
    public void method2() { delegate.method2(); }
    (...)
    public void methodN() { delegate.methodN(); }

}

Maintenant, si Maclasse a beaucoup de méthodes que j'aurais besoin de remplacer chacun d'eux qui est plus ou moins le même code qui vient de "délégués". Je me demandais si il est possible de faire de la magie pour appeler automatiquement une méthode en Java (donc la classe Wrapper aurait besoin de dire "Hey, si vous appelez une méthode sur moi il suffit d'aller à délégué objet et l'appel de cette méthode).

BTW: je ne peux pas utiliser l'héritage parce que le délégué n'est pas sous mon contrôle.Je viens d'obtenir son instance d'ailleurs (un autre cas serait si MyClass était définitive).

REMARQUE: je ne veux pas IDE génération. Je sais que je peux le faire avec l'aide de l'Ide/Eclipse, mais je suis curieux de savoir si cela peut être fait dans le code.

Des suggestions pour obtenir quelque chose comme cela? (NOTE: je serais probablement capable de le faire dans certains langages de script comme php où je pourrais utiliser php fonctions magiques pour intercepter l'appel).

  • Il y a certainement un (simple) de la solution avec de la réflexion, mais voulez-vous accepter les problèmes de performance? La version avec le manuel des délégués est même plus simple à lire.
  • J'ai changé tous de retour à la MyClass. Dans ma situation, à la fois classe hérite de MyBaseClass, mais je voulais rendre l'exemple plus simple, donc je l'ai changé hériter de MyClass (j'ai enlevé le modifier avec MyBaseClass, de sorte que vous pouvez pour l'instant l'oublier:).
  • Si vous voulez dire que je vais avoir de moins bonnes performances avec la réflexion de ce qui est acceptable. Je préfère ne pas utiliser la réflexion (si possible), mais il est toujours une option acceptable. Si vous n'avez pas idée de comment faire cela avec la réflexion s'il vous plaît poster une réponse. BTW: voir mon commentaire pour une réponse posté par @Nitin Dandriyal
  • Je pourrais fournir une solution d'interface commune, c'est à dire MyClass et WrapperClass implémenter la même interface et WrapperClass délégués à cette interface. Ok pour vous?
  • Oui.. Ce qui semble exactement à ce que je cherche.
InformationsquelleAutor walkeros | 2015-05-20