Ce qui est le plus proche pour remplacer un pointeur de fonction en Java?

J'ai une méthode qui est d'environ une dizaine de lignes de code. Je veux créer plus de méthodes qui font exactement la même chose, sauf pour un petit calcul qui va changer une ligne de code. C'est une application parfaite pour passer un pointeur de fonction pour remplacer qu'une seule ligne, mais Java n'a pas de pointeurs de fonction. Quelle est ma meilleure alternative?

  • Java 8 aura le Expressions Lambda. Vous pouvez en lire plus sur les expressions lambda, ici.
  • Je n'ai pas tout à fait penser à des expressions lambda comptent comme des pointeurs de fonction. Le :: opérateur, sur l'autre main...
  • Désolé pour la fin du commentaire 😉 - normalement, vous n'avez pas besoin d'un pointeur de fonction pour cela. Il suffit d'utiliser un modèle de méthode! (en.wikipedia.org/wiki/Template_method_pattern)
  • en regardant l'article, semble exagéré - plus complexe que les réponses données ici. Plus précisément, le modèle de la méthode nécessite la création d'une sous-classe pour chaque alternative de calcul. Je ne vois pas l'OP d'avoir dit quelque chose qui exige que les sous-classes; il veut simplement créer plusieurs méthodes, et de partager plus de la mise en œuvre. Comme la accepté de répondre à des spectacles, c'est facile à faire "à la place" (à l'intérieur de chaque méthode), avant même de Java 8 avec son lambdas.
  • La solution retenue exige également de la classe par le calcul (même si c'est juste un anonyme intérieur de la classe). Et la méthode de modèle de modèle peut aussi être réalisé en utilisant les classes internes anonymes, de sorte qu'il ne diffère pas beaucoup de la solution retenue concernant les frais généraux (avant Java 8). Il est donc plus une question de l'utilisation modèle et détaillés exigences, dont nous ne connaissons pas. J'apprécie la accepté de répondre et je voulais juste ajouter une autre possibilité de penser.
  • Avec l'ajout de la :: opérateur il y a quelques années, vous souhaitez peut-être envisager d'accepter un up-to-date de la réponse (par exemple, Alex, akhil_mittal de l', user3002379 de l', ou de mine).