=== @FunctionalInterface === ==> 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/ === TriConsumer === Etape1: @FunctionalInterface public interface TriConsumer { void accept(T t, U u, V v); default TriConsumer andThen(TriConsumer after) { Objects.requireNonNull(after); return (a, b, c) -> { accept(a, b, c); after.accept(a, b, c); }; } } Etape2: private static final TriConsumer UPDATE_FROM_SNAPSHOT_METHOD = AbstractSimulatedValue::updateValueFromSnapshot; * UPDATE_FROM_SNAPSHOT_METHOD : est donc une référence la méthode AbstractSimulatedValue::updateValueFromSnapshot(). Cette méthode contient bien les 3 paramètres (type/classe, 1er argument, 2e argument). 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)