特に意味は無いけど、ジェネリクスとかenumを使ってみよう。 // 関数のインターフェイス public interface Function { Y apply(X x); } まぁ、これはどこにでもあるようなインターフェイス。これを使って、ループを抽象化*1してみる。 何をやるかというと、ループの最初と最後の処理は普通の処理とは違う処理を施したいことが多い*2ので、それを支援できるようにしている。 public class Loop { private Function normalProc; // 通常の処理 private Function firstProc; // 最初の処理 private Function lastProc; // 最後の処理 // 一個しか要素が無い場合の動作(デフォルトではlastProcを実行) private ActionType actType =