Я использую Wicket 6 / Java 8 и добавляю несколько простых классов, которые используют функциональность лямбда из Java 8 (я знаю, что более поздние версии Wicket имеют поддержку лямбда, но мы не можем обновить сейчас).Я создаю LambdaModel, которая немного похожа на PropertyModel, которая, я надеюсь, избавит от необходимости жестко кодировать строки, представляющие вложенный путь к свойству.
Для начала я делаю простой readonlyверсия.Я сделал Serializable версии интерфейса Function для создания следующего:
public class LambdaModelUtils {
public static <X,R> IModel<R> ofNested( IModel<X> target, SerializableFunction<?,?>... path ) {
// creates a model that works through each function in the path in turn
}
}
Моя реализация работает хорошо, но единственная проблема заключается в том, что вызов этого метода «эффективным» способом вызывает ошибки компиляции:
IModel<Parent> parentModel = ...
IModel<String> model = LambdaModelUtils.ofNested( parentModel,
Parent::getChild, Child::getName ); // Compile time error
Единственный способ найти способ вызова метода заключается в следующем:
SerializableFunction<Parent,Child> path0 = Parent::getChild;
SerializableFunction<Child,String> path1 = Child::getName;
IModel<String> model = LambdaModelUtils.ofNested( parentModel,
path0, path1 ); // works
Это немного неуклюже - есть ли лучший способ?
Я посмотрел здесь но, похоже, это тоже не работает:
List<SerializableFunction> path = Arrays.asList( Parent::getChild, Child::getName );
Спасибо