Wicket8 ビヘビアもラムダの恩恵が沢山あるだろう。
Wicket 7 で、SerializableConsumer が無かったおかげで例えば、AjaxEventBehavior で スクロールイベントの処理は
以下のようなクラスを用意して、
import org.apache.wicket.ajax.AjaxEventBehavior; import org.apache.wicket.ajax.AjaxRequestTarget; import org.danekja.java.util.function.serializable.SerializableConsumer; /** * スクロール時の AjaxEventBehavior. */ public abstract class AjaxScrollEventBehavior extends AjaxEventBehavior{ protected abstract void onScroll(AjaxRequestTarget target); public AjaxScrollEventBehavior(){ super("scroll"); } @Override protected void onEvent(AjaxRequestTarget target){ onScroll(target); } }
リストのスクロールに対して
listcontainer.add(new AjaxScrollEventBehavior(){ @Override protected void onScroll(AjaxRequestTarget target){ // 処理 } });
と書いていた。
Wicket8 で SerializableConsumer を使い、この AjaxScrollEventBehavior に、更に以下の
private コンストラクタと、static メソッドを用意すれば、ラムダが使える。
private AjaxScrollEventBehavior(String event){ super(event); } public static AjaxScrollEventBehavior onScroll(SerializableConsumer<AjaxRequestTarget> c){ return new AjaxScrollEventBehavior("scroll"){ private static final long serialVersionUID = 1L; @Override protected void onScroll(AjaxRequestTarget target){ c.accept(target); } }; }
たかが、2,3行の削減ではないかと言うかもしれないが、たくさん出現するとやはり、かさ張ってきて見づらくなる。
listcontainer.add(AjaxScrollEventBehavior.onScroll(t->{ // 処理 });