Java 8链式方法参考?

假设有一个典型的Java Bean:

class MyBean {

void setA(String id) {

}

void setB(String id) {

}

List<String> getList() {

}

}

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

Map<SomeEnum, BiConsumer<MyBean, String>> map = ...

map.put(SomeEnum.A, MyBean::setA);

map.put(SomeEnum.B, MyBean::setB);

map.put(SomeEnum.List, (myBean, id) -> myBean.getList().add(id));

有没有一种方法,以取代拉姆达(myBean, id) ->

myBean.getList().add(id)用链式方法的参考,像(myBean.getList())::add或者myBean::getList::add还是其他什么东西?

回答:

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


但是如果你坚持下去……

static <V,T,U> BiConsumer<V,U> filterFirstArg(BiConsumer<T,U> c, Function<V,T> f) {

return (t,u)->c.accept(f.apply(t), u);

}

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

该方法的命名建议将其视为已存在BiConsumer(此处为List.add),并在MyBean.getList()其第一个参数之前添加一个函数(此处为)。容易想象一下,用于过滤第二个参数或同时过滤两个参数的等效实用程序的样子。

但是,它对于将现有实现与另一个操作结合起来非常有用。在您的特定示例中,使用网站并不比普通的lambda表达式更好

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

以上是 Java 8链式方法参考? 的全部内容, 来源链接: utcz.com/qa/408824.html

回到顶部