Hi all,
as far as I know, subclassing is a main part of the Wicket development process.
For most stuff, it seems necessary to define named or anonymous subclasses to
define behavior. I find this very verbose.
For some time now, I have been compiling a bunch of "Lambdaized" Wicket classes
in one of my projects and coding with them feels -at least to me- much cleaner.
Consider for example:
.Different kinds of behaviors
```
import static ... LambdaBehavior.visibleWhen;
var editor = new DropDownChoice<Pair<String, String>>("dropdown");
editor.add(visibleWhen(() -> editor.getChoices().size() > 1));
```
.Components using callbacks instead of method overriding
```
var form = new LambdaForm<AnnotationEditorState>("form", state);
form.onSubmit(this::actionSave);
form.add(new LambdaAjaxButton<>("button"
this::actionClearSkippedRecommendations));
```
.Behaviors using lambdas instead of method overriding
```
.add(new LambdaClassAttributeModifier(classes -> {
if (stats.getNewAnnotations() == 0) {
classes.add("text-opacity-25");
}
return classes;
})));
```
You can find the implementations here:
https://github.com/inception-project/inception/tree/main/inception/inception-support/src/main/java/de/tudarmstadt/ukp/inception/support/lambda
In general, I think I would prefer a more "verb" oriented style especially for
behaviors,
e.g. instead of new LambdaClassAttributeModifier(...) use a static
modifiyClassAttribute(...). The LambdaBehavior already has that, but some of
its static methods (e.g. onConfigure) currently clash with Component methods
preventing a static import.
What do you think of that style?
Is that something you'd find interesting for including in Wicket proper?
Cheers
-- Richard