Wicket LambdaModel и NumberTextField не могут разрешить тип - PullRequest
0 голосов
/ 28 сентября 2018

После переключения на LambdaModel в качестве альтернативы PropertyModel в одной из моих форм в приложении Wicket 8 я не могу отправить тесты, в которых говорится:

java.lang.ClassCastException: java.lang.String не может быть приведен к java.math.BigDecimal

Моя панель форм имеет NumberTextField, который в моем рабочем сценарии связан с PropertyModel.

ЭТО РАБОТАЕТ

form.add(new NumberTextField<BigDecimal>("myBigDecimalField", new PropertyModel<>(getModel(), "myBigDecimalField")));

ЭТО НЕ РАБОТАЕТ

form.add(new NumberTextField<BigDecimal>("myBigDecimalField", LambdaModel.of(getModel(), MyClass::getMyBigDecimalField, MyClass::setMyBigDecimalField)));

Проблема в том, что LambdaModel не реализуетсяIObjectClassAwareModel, как PropertyModel делает, и поэтому, когда NumberTextField пытается разрешить тип в AbstractTextComponent#152 и последовательно проверяет getModelType, является ли модель экземпляром IObjectClassAwareModel, она не будет работать, так как LambdaModelне реализует этот интерфейс.

Предполагается ли, что LamdaModel не имеет значения IObjectClassAwareModel.Кстати, я знаю, что могу решить эту проблему с явным объявлением класса типа NumberTextField.

1 Ответ

0 голосов
/ 28 сентября 2018

К сожалению, довольно сложно получить любую информацию о типах из лямбд.

См. Здесь для объяснения:

Java: как разрешить универсальный тип параметра лямбда?

Итак, на данный момент рекомендуется передать тип компоненту.

...