8
votes

Est-il possible de créer une classe anonyme lors de l'utilisation de la réflexion?

J'aimerais pouvoir implémenter une méthode à l'exécution appelée avant qu'un objet exécute les initialisateurs. Cela me permettra de définir des champs utilisés lors de l'initialisation.

Voici un exemple: xxx

Je finirai probablement à utiliser des aspects, mais j'aimerais savoir s'il y a une voie pure Java. < / p>


0 commentaires

3 Réponses :


1
votes

Voulez-vous dire quelque chose comme celui-ci en supposant qu'il compilerait (ce qu'il ne le fait pas): xxx



1
votes

Il ressemble à ce que vous voulez être Proxies dynamiques , qui ont été disponibles depuis Java 1.3.

EDIT: J'ai regardé sur Mockito pour voir comment ils ont réussi à se moquer de classes en béton et il s'avère qu'ils créent un code octet, puis le chargent avec un chargeur de classe. Non seulement cela ne comprend pas vraiment ce que vous voulez, mais il est plus complexe que nécessaire.

Je suis d'accord avec Stephen C: Pourquoi voulez-vous faire cela? Je soupçonne qu'il peut y avoir un moyen plus facile. Je soupçonne ce qui peut mieux fonctionner pour vous est le Stratégie ou Commande motif. Dans ce cas, le code personnalisé est en sa propre petite classe: xxx

qui est attribué à la classe principale ou enroule la classe principale (en fonction du besoin). < / p>


2 commentaires

Je ne sais pas comment je pourrais implémenter cela puisque les proxies implémentent des interfaces. Je dois mettre en œuvre une méthode d'une classe dans mon cas. Pourriez-vous être plus précis?


La prochaine étape consiste à regarder le code de Mockito ( Mockito.org ), car ils ont du code pour simuler des classes en béton. , qui semble être similaire à ce que vous voulez. Je pourrais peut-être vous aider avec cela pendant le week-end.



1
votes

Ce que vous essayez de faire serait créer une nouvelle classe intérieure anonyme qui est une sous-classe de certaines classes que vous connaissez uniquement au moment de l'exécution. La réflexion ne peut pas résoudre ce problème.

Les proxy dynamiques pourraient ... Si vous essayiez de mettre en place une interface chargée de manière dynamique.

Les seules autres approches que je peux penser sont d'utiliser la génération / compilation / compilation de code source dynamique. Et les deux vont être très compliqués. Et ni ne comptent ni pure java.

Mon conseil serait de jeter un coup d'œil à ce que vous essayez de réaliser. (Votre question ne donne aucune indication sur ce que cela pourrait être, il est donc difficile d'offrir des suggestions pratiques.)


1 commentaires

Je suis en cours d'exécution dans les initialistes qui exigent que les champs soient initialisés avant l'exécution des initialisateurs. Le conceptuel est que je charge une vue, la logique de vue est dans l'initialiseur et je souhaite définir les attributs de modèle avant la création de la vue.