Outils pour utilisateurs

Outils du site


techniques:java8_functional_interfaces

@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<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;
  • 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)
techniques/java8_functional_interfaces.txt · Dernière modification: 2020/03/01 07:53 (modification externe)