最初に
この記事は、以下の書籍を通じてJava silverの合格に向けて自分が学んだ内容を体系的にアウトプットする記事である。(目指せ年始合格!)
徹底攻略Java SE 11 Silver問題集[1Z0-815]対応
勉強記録
ラムダ式とは
- 関数型インターフェースを実装した匿名クラスの簡易的な記述法。
//使い方の一つ
関数型インターフェースの型 変数名 =(引数)->{処理};
//関数型インターフェース
interface Sample{
void print(int num);
}
public class Main{
public static void main(String[] args){
//関数型インターフェースの型 変数名 =(引数)->{処理};
Sample sample = (num) -> System.out.println(num);
sample.print(10);
}
}
- ラムダ式は、関数型インターフェース・ローカルクラス・匿名クラスの仕組みを利用。
関数型インターフェースとは
- 実装が必要なメソッド(抽象メソッド)を一つだけ持つインターフェース。
public interface SampleInterface1{
public void sample1(String sample);
}
//アノテーションで明示しても良い
@FunctionalInterface
public interface SampleInterface2{
public void sample2(String sample);
}
- staticメソッドやdefaultメソッドは定義されていてもOK。
- よく使われる関数型インターフェースは以下を参考
ローカルクラスとは
- メソッドの処理中でクラスを宣言して利用できる仕組み。
public static void main(String[] args) {
class Local {
public void sayHello() {
System.out.println("Hello!");
}
}
Local local = new Local();
local.sayHello(); // Hello!
}
- インターフェースを実装したローカルクラスは以下。
public static void main(String[] args) {
class Local implements Runnable {
@Override
public void run() {
System.out.println("Hello Lambda!");
}
}
Runnable runner = new Local();
runner.run(); // Hello Lambda!
}
匿名クラスとは
- インターフェースを実装したローカルクラスの宣言を省略する仕組み。
public static void main(String[] args) {
Runnable runner = new Runnable() {
@Override
public void run() {
System.out.println("Hello Lambda!");
}
};
runner.run(); //Hello Lambda!
}
- 上記の匿名クラスを、さらに簡略化したのがラムダ式。
public static void main(String[] args) {
Runnable runner = () -> { System.out.println("Hello World!"); };
runner.run(); //"Hello World!"
}
- 上記より、ラムダ式は、インターフェースを実装したインスタンスを生成する式と言える。
参考にしたサイト
感想
- 関数型インターフェースは、完全に初見だった。(問題集のこの章の問題のほぼ全てがわからなかった。)
- ラムダ式も自分は、既存のコードを見ながら見よう見まねで使っていた部分が多かったので、今回でラムダ式が何をしているかの理解を深めることができてよかった。