Предположим, есть типичный 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
или что-то еще?
map.put(SomeEnum.List, (myBean, id) -> myBean.getList().add(id));
? - person Andremoniy   schedule 19.03.2015BiConsumer
в виде лямбда. - person Random42   schedule 19.03.2015String str = obj.getList().get(0);
будет лиstr
ссылаться на то, что возвращаетgetList()
или чтоget(0)
? Я считаю, что семантика может быть такой же для возможной ссылки на цепной метод. - person Random42   schedule 19.03.2015BiConsumer
переходит ко второму методу, но нет причин, по которым компилятор должен предполагать то же самое. - person Holger   schedule 19.03.2015::
не будет проблемой, если такая функция будет реализована. - person Random42   schedule 19.03.2015(x,y)->x.foo().bar(y)
, а не как(x,y)->x.foo(y).bar()
. Ссылки на методы также могут относиться кstatic
методам, поэтому они также могут быть(x,y)->Type.foo(x).bar(y)
или(x,y)->Type.foo(x, y).bar()
или(x,y)-> Type.foo().bar(x,y)
или(x,y)->Type2.bar(Type1.foo(x), y)
или(x,y)-> Type2.bar(Type1.foo(x, y))
или(x,y)->Type2.bar(Type1.foo(), x, y)
или(x,y)-> Type2.bar(x.foo(), y)
или(x,y)->Type2.bar(x.foo(y))
- person Holger   schedule 19.03.2015