Java fonctionne comme des objets


J'ai une très bonne utilisation pour avoir des fonctions en tant qu'objets en Java, alias le genre de chose suivant:

Function handle_packet_01 = void handle() {}

Je ne veux pas utiliser Scala parce que je ne supporte pas la syntaxe.

Y a-t-il une sorte de hack que je peux appliquer à la JVM pour me permettre de le faire? Que diriez-vous d'un plugin Eclipse?

J'ai vu un genre de chose similaire pour la surcharge de l'opérateur en Java, pour laquelle je vais installer le plugin aussi.

Author: Lolums, 2015-12-08

1 answers

En Java 8, vous pouvez référencer une méthode membre comme suit

MyClass::function

EDIT: UN exemple plus complet

//For this example I am creating an interface that will serve as predicate on my method
public interface IFilter
{
   int[] apply(int[] data);
}

//Methods that follow the same rule for return type and parameter type from IFilter may be referenced as IFilter
public class FilterCollection
{
    public static int[] median(int[]) {...}
    public int[] mean(int[]) {...}
    public void test() {...}
}

//The class that we are working on and has the method that uses an IFilter-like method as reference
public class Sample
{
   public static void main(String[] args)
   {
       FilterCollection f = new FilterCollection();
       int[] data = new int[]{1, 2, 3, 4, 5, 6, 7};

      //Static method reference or object method reference
      data = filterByMethod(data, FilterCollection::median);
      data = filterByMethod(data, f::mean);

      //This one won't work as IFilter type
      //data = filterByMethod(data, f::test); 
   }

   public static int[] filterByMethod(int[] data, IFilter filter)
   {
       return filter.apply(data);
   }

}

Jetez également un œil à lambda expressions pour un autre exemple et l'utilisation de la référence de méthode

 1
Author: KuramaYoko, 2015-12-09 16:59:31