SAMタイプ

SAMタイプのSAMとは、Single Abstract Method の略です。
直訳すればなんとなくイメージはつかめます。「単一」「抽象」「メソッド」。
つまり、SAMタイプとは、
一つの抽象メソッドだけで構成されたクラスもしくはインタフェース
のことです。
Comparatorのcompare()などがSAMタイプですね。
SAMタイプのメリットは分かりやすさだと自分では思っています。「Comparator」なら、あぁ、「compare()」できるのね。って一目了然です。また関数オブジェクト的に使ったりします。

Javaには、匿名メソッドがないので、SAMタイプのインタフェースやクラスをつかって疑似クロージャを作ったりするのが有名ですね。

interface Invoker<T>{
    public void invoke(T arg);
}

こんなインタフェースを定義しておいて、

  Dao dao = DaoFactory.createDao(User.class);

  final InBean inBean = someMethod();
  Invoker invoker = new Invoke<InBean>(){
      @Override
      public void invoke(inBean){
          dao.insert(inBean);
      }
  }

こんな使い方をします。(コードはすごくテキトー。)