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())::add
或myBean::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);
- 在Spring Boot中,通过扩展MappingJackson2HttpMessageConverter添加自定义转换器似乎覆盖了现有的转换器
- 如何在运行时创建对象?
- Maven / Spring:AopNamespaceUtils NoSuchMethod错误
- 会话关闭后如何强制hibernate释放内存?
- org.hibernate.StaleStateException:批量更新从update 返回意外的行数; 实际行数:0; 预期
- 如何从JAXB编组的XML文件中删除xmlns:xsi和xsi:type
- Java阻止JComponent的焦点
- Java从MIDI键盘获取输入
- mp3到java中的wav转换