==> quand mis dans un parametre de methode, permet l'appel de la méthode en passant en parametre : methode statique, methode d'instance, constructeur, ou d'une fonction lambda
exemple : Consumer est la FunctionalInterface qu'on va utiliser dans la méthode m
class MaClasse {
void m(Consumer c) {
c.methodeAbstraiteDuConsumer(truc);
}
}
appel : a.m( MaClasse::mamethodeStatiqueQuiEstTypeCommeLaMethodeAbstraiteDeclareeDansConsumer )
https://blog.ippon.fr/2014/03/18/java-8-interfaces-fonctionnelles/
Etape1:
@FunctionalInterface
public interface TriConsumer<T, U, V> {
void accept(T t, U u, V v);
default TriConsumer<T, U, V> andThen(TriConsumer<? super T, ? super U, ? super V> after) {
Objects.requireNonNull(after);
return (a, b, c) -> {
accept(a, b, c);
after.accept(a, b, c);
};
}
}
Etape2: private static final TriConsumer<AbstractSimulatedValue, Network, Optional> UPDATE_FROM_SNAPSHOT_METHOD = AbstractSimulatedValue::updateValueFromSnapshot;
L'appel UPDATE_FROM_SNAPSHOT_METHOD.accept(a,b,c) va bien exécuter s.updateValueFromSnapshot(b,c);
* AbstractSimulatedValue::updateValueFromSnapshot() est une méthode de base (polymorphisme)