編集の要約なし
 
(同じ利用者による、間の4版が非表示)
1行目: 1行目:
< [[Java基本文法]]
< [[Java基本文法]]


* 機能オブジェクトとは、クラス内のメソッドを再利用するための仕組み
* 機能オブジェクトとは、他のメソッドを再利用するための仕組み
* メソッドを定義することなくロジックを利用したい場合は[[ラムダ式]]が利用できる
* メソッドを定義することなくロジックを利用したい場合は[[ラムダ式]]が利用できる
* 機能オブジェクトを格納するには同じ戻り値と引数を定義した[[SAMインターフェース]]を使う
* 機能オブジェクトを格納するには同じ戻り値と引数を定義した[[SAMインターフェース]]を使う
17行目: 17行目:


==例==
==例==
[[ラムダ式:例|ラムダ式の例]]と比較
機能オブジェクトでは、ロジックを再利用しているのがポイント。[[ラムダ式#例|ラムダ式の例]]と比較。
  # FuncList.java
  # FuncList.java
  public class FuncList {
  public class FuncList {

2019年7月2日 (火) 20:28時点における最新版

< Java基本文法

  • 機能オブジェクトとは、他のメソッドを再利用するための仕組み
  • メソッドを定義することなくロジックを利用したい場合はラムダ式が利用できる
  • 機能オブジェクトを格納するには同じ戻り値と引数を定義したSAMインターフェースを使う
import java.util.function.*;
public class Main {
    public static int sub(int a, int b) {
        return a - b;
    }
    public static void main(String[] args) {
        IntBinaryOperator func = Main::sub;
        int ans = func.applyAsInt(5, 3);
        System.out.println("5 - 3" + ans);
    }
}

機能オブジェクトでは、ロジックを再利用しているのがポイント。ラムダ式の例と比較。

# FuncList.java
public class FuncList {
    public static boolean isOdd(int x) { return (x % 2 == 1); }
    public static String addMr(boolean male, String name) {
        if (male == true) { return "Mr." + name; }
        else { return "Ms." + name; }
    }   
}
# Main.java
interface Func1 {
boolean call(int x); 
}
interface Func2 {
String call(boolean male, String name);
}

public class Main {
public static void main(String[] args) {
    Func1 f1 = FuncList::isOdd;
    Func2 f2 = FuncList::addMr;
    System.out.println(f1.call(15));
    System.out.println(f2.call(true, "Smith"));
}