是否可以在消费者中运行方法,如方法引用,但是在传递给使用者的对象上运行:
Arrays.stream(log.getHandlers()).forEach(h -> h.close());
会是这样的:
Arrays.stream(log.getHandlers()).forEach(this::close);
但那不起作用......
是否有可能使用方法引用,或者x -> x.method()
是否只能在这里工作?
答案 0 :(得分:34)
您不需要this
。 YourClassName::close
将在传递给使用者的对象上调用close
方法:
Arrays.stream(log.getHandlers()).forEach(YourClassName::close);
有四种方法引用(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
在你的情况下,你需要第三种。
答案 1 :(得分:12)
我想它应该是:
Arrays.stream(log.getHandlers()).forEach(Handler::close);
如果log.getHandlers()
返回Handler
类型的对象数组。
答案 2 :(得分:7)
当然,但您必须使用method reference的正确语法,即传递close()
方法所属的类:
Arrays.stream(log.getHandlers()).forEach(Handler::close);