Как стать автором
Обновить

Комментарии 5

Я думаю, что лучше в этом месте:
add(new Label("name", new AbstractReadOnlyModel<String>() {
            @Override
            public String getObject() {
                return model.getObject().getName();
            }
        }));

использовать лямбду или придумать, что сделать, чтобы можно было использовать лямбду
вот тут: www.slideshare.net/dashorst/de-vdev-meetup-1
на 84 слайде они как раз что-то подобное сделали
Собственно, смысл поста и заключается в демонстрации того, как можно задействовать лямбду.

Непосредственно AbstractReadOnlyModel с лямбда-выражением не скрестить, потому что лямбда требует функционального интерфейса, а у нас тут абстрактный класс.

Презентация весьма интересна, спасибо за ссылку, однако в ней речь идёт о пока что гипотетическом Wicket 8 («Anything written here is just speculation from my side. This is not set in stone, this is not how e are going to implement things, w or quite reasonably at all.»). Когда выйдет или хотя бы появится в репозитории кода, будет интересно пощупать. Ну а текущий пост — о том, что уже можно применить в продакшне.
Мы сделали так:

1. Заводим где-то вспомогательный метод, перегоняющий лямбду в модель:
public static <T> AbstractReadOnlyModel<T> arom(Supplier<T> s) {
    return new AbstractReadOnlyModel<T>() {
        @Override
        public T getObject() {
            return s.get();
        }
    };
}


2. Используем:
    add(new Label("name", arom(User::getName)));

Пардон, а где же ссылка на объект или модель, из которых компонент будет доставать данные? Тогда уж

    add(new Label("name", arom(user::getName)));


где user — экземпляр класса User.
Ну да. Писал код сразу сюда без компилятора.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации