Java 8链式方法参考?

假设有一个典型的Java Bean:

class MyBean { void setA(String id) { } void setB(String id) { } List getList() { } } 

我想在BiConsumer的帮助下创建一种更抽象的方式来调用setter:

 Map<SomeEnum, BiConsumer> map = ... map.put(SomeEnum.A, MyBean::setA); map.put(SomeEnum.B, MyBean::setB); map.put(SomeEnum.List, (myBean, id) -> myBean.getList().add(id)); 

有没有办法用链式方法引用替换lambda (myBean, id) -> myBean.getList().add(id) ,类似于(myBean.getList())::addmyBean::getList::add还是其他什么?

不,方法引用不支持链接。 在您的示例中,不清楚两种方法中的哪一种应该接收第二个参数。


但如果你坚持下去……

 static  BiConsumer filterFirstArg(BiConsumer c, Function f) { return (t,u)->c.accept(f.apply(t), u); } 

 BiConsumer c = filterFirstArg(List::add, MyBean::getList); 

该方法的命名建议将其视为采用现有BiConsumer (此处为List.add )并将函数(此处为MyBean.getList() )添加到其第一个参数。 很容易想象一个等效的实用方法如何过滤第二个参数或两者同时看起来像。

但是,它主要用于将现有实现与另一个操作组合。 在您的特定示例中,使用站点并不比普通的lambda表达式更好

 BiConsumer c = (myBean, id) -> myBean.getList().add(id);