使用流 API 在每个对象上调用方法的“好”方法

2022-09-01 18:21:53

是否可以在使用者中运行方法,就像方法引用一样,但在传递给使用者的对象上:

Arrays.stream(log.getHandlers()).forEach(h -> h.close());

会是这样的东西:

Arrays.stream(log.getHandlers()).forEach(this::close);

但这不起作用...

是否有可能使用方法引用,或者这是唯一的方法?x -> x.method()


答案 1

您不需要 . 将调用传递给使用者的对象上的方法:thisYourClassName::closeclose

Arrays.stream(log.getHandlers()).forEach(YourClassName::close);

有四种方法引用():

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

在你的情况下,你需要第三种。


答案 2

我想它应该是:

Arrays.stream(log.getHandlers()).forEach(Handler::close);

提供 返回类型对象的数组。log.getHandlers()Handler


推荐