Да предположим, че има типичен 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