147 votes

Pointeurs de fonction en Java

C’est peut-être quelque chose de commun et trivial, mais il me semble avoir des difficultés à trouver une réponse concrète. En c#, il y a une notion de délégués, qui concerne fortement l’idée de pointeurs de fonction de C++. Existe-t-il une fonctionnalité similaire dans Java ? Étant donné que les pointeurs sont quelque peu absent, ce qui est le meilleur moyen à ce sujet ? Et pour être clair, nous parlons première classe ici.

125voto

Michael Borgwardt Points 181658

Le langage Java pour cette fonctionnalité de pointeur fonction-type est une une classe anonyme qui implémente une interface, par exemple

Mise à jour : ce qui précède est nécessaire dans les versions Java Java 8. Maintenant, nous avons des solutions de rechange beaucoup plus agréables, à savoir les expressions lambda :

et les références de la méthode :

63voto

raupach Points 1443

Vous pouvez remplacer un pointeur de fonction avec une interface. Permet de dire que vous voulez exécuter à travers une collection et faire quelque chose avec chaque élément.

Il s’agit de l’interface, que nous pourrions passer à certains disent CollectionUtils2.doFunc (Collection c, IFunction f).

A titre d’exemple que nous avons une collection de nombres, et vous ne souhaitez pas ajouter de 1 à chaque élément.

41voto

zoquete Points 295

Vous pouvez utiliser la réflexion pour le faire.
Passer comme paramètre l’objet et le nom de la méthode (sous forme de chaîne) et ensuite appeler la méthode. Par exemple :

Et ensuite l’utiliser comme dans :

Bien sûr, vérifier toutes les exceptions et ajouter les moulages nécessaires.
Désolé de mon mauvais anglais.
Bye !

20voto

jwoolard Points 1905

Non, fonctions ne sont pas des objets de première classe en java. Vous pouvez faire la même chose en implémentant une classe de gestionnaire - c’est comment les rappels sont implémentées dans le Swing, etc..

Il existe cependant des propositions pour les fermetures (le nom officiel de ce que vous parlez) dans les futures versions de java - Javaworld a un article intéressant.

15voto

Yuval F Points 15248

Cela me rappelle les de Steve Yegge l’exécution dans le Royaume des substantifs. Il indique essentiellement que Java a besoin d’un objet pour chaque action et n’a donc pas de « verbe seulement » des entités telles que les pointeurs de fonction.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X