Est-il possible d'exécuter une méthode, dans un consommateur, comme une référence de méthode, mais sur l'objet passé au consommateur:
Arrays.stream(log.getHandlers()).forEach(h -> h.close());
serait une chose comme:
Arrays.stream(log.getHandlers()).forEach(this::close);
mais ça ne marche pas ...
Y a-t-il une possibilité avec des références de méthode, ou est-ce que x -> x.method()
est la seule façon de travailler ici?
Vous n'avez pas besoin de this
. YourClassName::close
appellera la méthode close
sur l'objet passé au consommateur:
Arrays.stream(log.getHandlers()).forEach(YourClassName::close);
Il existe quatre types de références de méthode ( Source ):
Kind Example
---- -------
Reference to a static method ContainingClass::staticMethodName
Reference to an instance method of a particular object containingObject::instanceMethodName
Reference to an instance method of an arbitrary object of a particular type ContainingType::methodName
Reference to a constructor ClassName::new
Dans votre cas, vous avez besoin du troisième type.
Je suppose que ça devrait être:
Arrays.stream(log.getHandlers()).forEach(Handler::close);
À condition que la log.getHandlers()
renvoie un tableau d'objets de type Handler
.
Bien sûr, mais vous devez utiliser la syntaxe correcte de référence de méthode , c'est-à-dire passer la classe à laquelle appartient la méthode close()
:
Arrays.stream(log.getHandlers()).forEach(Handler::close);