JAVA 関数オブジェクトの代入
9441 ワード
■変数へのメソッド参照の格納
メソッドがstaticの場合
変数名 = クラス名 :: そのクラスの静的メソッド名
メソッドが非staticの場合
変数名 = インスタンス変数名 :: そのインスタンスのメソッド名
■関数オブジェクトを格納可能な型
ある特定の引数と戻り値を持つ関数オブジェクトを格納できるのは、
その引数と戻り値を持つメソッド宣言を含んだSAMインタフェースの型
SAMインタフェースとは、
抽象メソッドを1つしか含まないインタフェースのこと
IntBinaryOperator
java.util.function.IntBinaryOperatorとは
public interface IntBinaryOperator {
public abstract int applyAsInt(int left, int right);
}
▪️Test76.java メソッドがstaticの場合 例
import java.util.function.IntBinaryOperator;
public class Test76 {
public static int sub(int a, int b) {
return a - b;
}
public static int cal(int x, int b) {
x *= 2;// 6
x += 3;// x=6+3→x=9
return x;
}
public static void main(String[] args) {
// subメソッドの処理ロジックを、変数funcに代入する
// 代入されているのはsubメソッドへの参照
IntBinaryOperator func = Test76::sub;
// 変数funcに格納されている処理ロジックを引数5と3で実行する
int a = func.applyAsInt(5, 3);
System.out.println("5-3は" + a);
IntBinaryOperator func2 = Test76::cal;
int b = func2.applyAsInt(1, 0);
System.out.println(b);
}
}
▪️Test76.java 実行結果
5-3は2
5
▪️Test79.java 例2
import java.util.function.*;
public class Test79 {
public static int submethod(int a, int b) {
return a - b;
}
public static void main(String[] args) {
// submethodの処理を変数rrrに代入する
IntBinaryOperator rrr = Test79::submethod;
// 変数rrrに格納されている処理ロジックを引数9と2で実行
System.out.println(rrr.applyAsInt(9, 2));
}
}
▪️Test79.java 実行結果
7
関数オブジェクトの代入
■変数に格納された関数の呼び出し
関数を格納した変数の名前 .SAM インタフェースのメソッド名(引数)
▪️Test78.java
public class Test78 {
public static int sub(int a, int b) {
return a - b;
}
public static void main(String[] args) {
MyFunction aaa = Test78::sub;
//変数に格納された関数の呼び出し
int num = aaa.call(15, 5);
System.out.println("15-5は" + num);
}
}
▪️MyFunction.java
public interface MyFunction {
public abstract int call(int x, int y);
}
▪️Test78.java 実行結果
15-5は10
Author And Source
この問題について(JAVA 関数オブジェクトの代入), 我々は、より多くの情報をここで見つけました https://qiita.com/icelandnono/items/7e5c5b72be0076e04825著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .