今回は、関数型のインタフェースについてメモしていきたいと思います。
関数型インタフェースとは(Function Interface)
- ただ1つの抽象メソッドもつInterfaceのこと
- APIの関数型InterfaceとしてはComparator、Runnableなどがある。
public interface Predicate<T> {
boolean test(T t);
}
public interface Comparator<T> {
int compare(T o1, T o2);
}
public interface Runnable {
void run;
}
public interface Callable<V> {
V call() throws Exception;
}
などなど。。。
InterfaceはDefault Methodを持つことができますが、多数のdefault メソッドがあったとしても抽象メソッドが1つであれば関数型Interfaceと言います。
Default Methodとは
Interfaceのメソッドをオーバーライドしていないクラスを考慮してボーディを含ませるメソッドのこと
使い方
Runnable r1 = () -> System.out.println("Hello World1"); // ①
Runnable r2 = new Runnable() {
public void run () {
System.out.println("Hello World2");
}
} // ②
public static void process(Runnable r) {
r.run();
} // ④
process(r1);
process(r2);
process(() -> System.out.println("Hello World3")); // ③
- ①はラムダを使って定義しています。
- ②は無名クラスを使って定義しています。
- ③はラムダ表現式をパラメータとしてそのまま渡しています。
- ④は関数型Interfaceを引数として持っているメソッドです。
上記の例でもわかるように、ラムダ表現式の方が簡潔で見やすいですね。
