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); } }
こんな使い方をします。(コードはすごくテキトー。)