インターフェース・ラムダ式・ストリームに特化した学習 (Udemy の、「Java SE8 インターフェース・ラムダ式・ストリーム集中コース」に基づく)
インターフェース <SE7までのインターフェースの特徴> ・複数個の抽象メソッドが設定可能 ・継承にて利用されるのが一般的 ・定数は、public static 扱いになる ・オブジェクトにはなれない ・ポリモフィズムは実現の手段 ・プログラミングよりも設計段階にて利用される(どういうメソッドを必要とするかを見極める力が試される)
<SE8インターフェースの特徴> ・複数個のstaticメソッドが設定可能 ・複数個のdefaultメソッドが設定可能 ・複数個の抽象メソッドが設定可能(利用時、実装する必要あり) ・関数型インターフェースの抽象メソッドは1個 ・new演算子によるオブジェクト生成が可能 ・関数型インターフェースはSE8インターフェースにおける一つの特殊な形態
<ラムダ式の構文パターン> 1.引数あり、戻り値なし ・(引数) -> 文 ・(引数) -> {文; (~複数の文~)}
2.引数1個、戻り値なし ・引数 -> 文 ・引数 -> {文; (~複数の文~)} ・(引数) -> 文 ・(引数) -> {文; (~複数の文~)}
3.引数なし、戻り値あり ・() -> return文または変数 ・() -> {文; (~複数の文~) return文}
4.引数複数あり、戻り値あり ・(引数) -> return文または変数 ・(引数) -> {文; (~複数の文~) return文}
<ラムダ式の価値> ・関数型インターフェースごとに処理を記述できる ・関数型インターフェースごとに処理の持ち歩きができる ・関数型インターフェースを引数の型・戻り値の型・コレクションの要素として利用できる ・多数の関数型インターフェースの処理を事前に作成しておき、利用したいときに利用できるようなシステム作りの設計が可能となる (SE8のインターフェースは作り込みを事前にしておくライブラリのように使える)
<間違えやすいストリームプログラミングの誤例> 1.連続して終端操作を実行 => コンパイルエラー 2.終端操作の戻り値 と 文全体の戻り値 の型が不一致 => コンパイルエラー 3.引数の型 と 実引数の型 が不一致 => コンパイルエラー 4.終端操作が実行されたストリームに対して、再度終端操作を実行する => IllegalStateException