est-il possible d'obtenir des références aux méthodes d'un objet? Par exemple, j'aimerais avoir une méthode qui invoque d'autres méthodes en tant que rappels. Quelque chose comme: est-ce possible? P> EDIT: Je voulais dire des méthodes d'un objet. Je suppose que ce n'est pas possible? P> p>
7 Réponses :
Java 7 aura des fermetures qui vous laisseront faire cela. P>
jusqu'à ce que cela soit disponible, vous avez deux options p>
Java 7 aura également des poignées de méthode, encore plus directes. :-P
Qu'en est-il des délégués C # -Style? Est-ce que nous obtenons ces temps?
Les fermetures ont-elles fait passer à travers Java 7?
@ CB160: Java7 May i> a des fermetures, ce n'est pas encore sûr de certains. Semble être plein d'espoir à ce stade, cependant.
@skaffman: Bien que rien ne soit certain, Mark Reinhold, le projet de projet pour JDK7 a annoncé à Devoxx 09 que Sun développerait des fermetures d'inclusion dans JDK7 - blogs.sun.com/mr/ientry/closures
Java 1.1 a des fermetures (verbeuse).
Oui, vous utilisez l'API de réflexion, par exemple L'API de réflexion n'est pas particulièrement agréable à utiliser, et elle porte une pénalité de performance (bien que cela soit beaucoup moins significatif qu'il n'était utilisé), mais cela fait le travail. P> java.lang.class.getMethods () code>
(et d'autres méthodes similaires sur classe code>). Vous appelez une méthode
méthode code> en utilisant
méthode.invoke () code>
. p>
fonctionne contrairement à la philosophie de conception de Java. Vous êtes censé créer une classe à méthode unique et transmettre une référence à une instance de celle-ci. P>
N'ajoute pas si nous parlons de setters d'une classe. 10 Setter + 10 getter = 20 objets pour les référencez-les d'une manière TypeAfe ne peut pas être bonne ^^ Donc, vous vous retrouvez avec des cordes et une réflexion non typées (comme dans de nombreux cadres)
Voici un exemple de ce qui est requis pour un rappel: Si vous remettez une instance de myCallback dans quoi que ce soit.MymeThod, il imprimera tout ce que vous remettez en tant que arguments. P > p>
Via réflexion Vous pouvez accéder à des méthodes d'une classe - voir
http://java.sun.com/docs/books/tatudial/reflect/member/Methodinvocation.html p>
et p>
http://java.sun.com/j2se/ 1.5.0 / DOCS / API / Java / Lang / Reflect / Méthode.html P>
Cependant, vous devez transmettre une instance de cette classe ainsi que les arguments. Vous pouvez créer une simple classe wrapper, cependant, quelque chose comme p> soyez prudent, car cela ne fonctionnerait pas avec aucun paramètre null. p> p>
Bien que cela soit possible grâce à la réflexion, le bien meilleur bet est de passer un objet et d'y accéder via une interface le tri fonctionne actuellement (en passant dans un comparateur). Obtenir l'habitude de penser et de concevoir de cette façon est le début de la compréhension de la programmation OO. P>
Le faire à travers les références de méthodes conduit vers une conception globale pire - mais est évidemment plus facile pour un travail piraté unique. Si vous êtes heureux avec le piratage, utilisez simplement Groovy plutôt que toutes ces coupes courtes sont intégrées et disposent d'une syntaxe beaucoup réduite / simplifiée, vient de conçue pour un code jetable rapide au lieu d'une maintenance à long terme. P>
Oui, c'est possible.
Vous avez simplement la méthode Obtenir la méthode et l'invoquer. P>
Voici quelques échantillons de code: p> La question est la question, qu'est-ce que tu essayes de faire? peut-être sont de meilleurs moyens. Mais quant à votre question, la réponse est oui. P> p>
Vous voulez dire "méthodes d'une classe", pas "Méthodes d'un objet", non?
@skaffman: Les méthodes de la classe d'un objet. Qu'en est-il? Ceci est une distinction importante: Si vous avez une instance de classe anonyme, vous ne pouvez vous référer à la classe par nom, uniquement via appeler
getclass code> sur l'instance. En utilisant une réflexion, vous pouvez accéder à d'autres méthodes que vous ne pouvez normalement pas accéder via l'interface de base / la classe / Enum. :-P