flutter、kotlin、java中将方法作为入参的区别

1、带参数带返回值的方法作为入参

(1)flutter

  • 定义
dart 复制代码
int add(int a, int b) => a + b;
int subtract(a, b) => a - b;

performOperation(int a, int b, int Function(int, int) function) => function(a, b);

// //简化写法
// add(a, b) => a + b;
// subtract(a, b) => a - b;
// performOperation(a, b, function) => function(a, b);
  • 使用
dart 复制代码
void main() {
  var res11 = performOperation(1, 2, add);
  var res12 = performOperation(1, 2, (a, b) => a + b);
  var res21 = performOperation(1, 2, subtract);
  var res22 = performOperation(1, 2, (a, b) => a - b);

  print("res11: $res11");
  print("res12: $res12");
  print("res21: $res21");
  print("res22: $res22");
}

(2)kotlin

  • 定义
kotlin 复制代码
fun add(a: Int, b: Int) = a + b
fun subtract(a: Int, b: Int) = a - b

fun performOperation(a: Int, b: Int, action: (Int, Int) -> Int) = action(a, b)
  • 使用
kotlin 复制代码
fun main() {
    val res11 = performOperation(1, 2, ::add)
    val res12 = performOperation(1, 2, action = { a: Int, b: Int -> a + b })
    val res21 = performOperation(1, 2, ::subtract)
    val res22 = performOperation(1, 2, action = { a: Int, b: Int -> a - b })

    println("res11: $res11")
    println("res12: $res12")
    println("res21: $res21")
    println("res22: $res22")
}

(3)java

  • 定义
java 复制代码
public class Test {

    int add(int a, int b) {
        return a + b;
    }

    int subtract(int a, int b) {
        return a - b;
    }


    int performOperation(int a, int b, BiFunction<Integer, Integer, Integer> action) {
        return action.apply(a, b);
    }
 }
  • 使用
java 复制代码
public class Test {
    int add(int a, int b) {
        return a + b;
    }

    int subtract(int a, int b) {
        return a - b;
    }


    int performOperation(int a, int b, BiFunction<Integer, Integer, Integer> action) {
        return action.apply(a, b);
    }

    void main(Test test) {
        int res11 = performOperation(1, 2, test::add);
        int res12 = performOperation(1, 2, (a, b) -> a + b);
        int res21 = performOperation(1, 2, test::subtract);
        int res22 = performOperation(1, 2, (a, b) -> a - b);
    }
}

2、带参数不带返回值的方法作为入参

(1)flutter

  • 定义
dart 复制代码
equals(int a, int b, Function(bool) callback) {
  if (a == b) {
    callback(true);
  } else {
    callback(false);
  }
}

// //简化写法
// equals(a, b, callback) {
//   if (a == b) {
//     callback(true);
//   } else {
//     callback(false);
//   }
// }
  • 使用
dart 复制代码
void main() {

  equals(2, 5, (value) => {
        if (value){
            //相等
            print("res3: 相等")
        }else{
            //不相等
            print("res3: 不相等")
        }
      }
  );
}

(2)kotlin

  • 定义
kotlin 复制代码
fun equals(a: Int, b: Int, callback: (Boolean) -> Unit) {
    if (a == b) {
        callback(true)
    } else {
        callback(false)
    }
}
  • 使用
kotlin 复制代码
fun main() {
    equals(1, 2, callback = { value ->
        if (value) {
            println("相等")
        } else {
            println("不相等")
        }
    })
}

(3)java

  • 定义
java 复制代码
public class Test {

    void equals(int a, int b, Function<Boolean, Void> callback) {
        if (a == b) {
            callback.apply(true);
        } else {
            callback.apply(false);
        }
    }
}
  • 使用
java 复制代码
public class Test {

    void equals(int a, int b, Function<Boolean, Void> callback) {
        if (a == b) {
            callback.apply(true);
        } else {
            callback.apply(false);
        }
    }


    void main() {

        equals(1, 2, (value) -> {
            if (value) {
                System.out.println("相等");
            } else {
                System.out.println("不相等");
            }
            return null;
        });
    }
}

3、不带参数不带返回值的方法作为入参

(1)flutter

dart 复制代码
checkOddNumber(int num, Function() oddCallback, Function() evenCallback) {
  if (num % 2 == 1) {
    //奇数
    oddCallback();
  } else {
    //偶数
    evenCallback();
  }
}

// //简化写法
// checkOddNumber(num, oddCallback, evenCallback) {
//   if (num % 2 == 1) {
//     oddCallback();
//   } else {
//     evenCallback();
//   }
// }
  • 使用
dart 复制代码
void main() {

  checkOddNumber(3, () => {print("res4: 奇数")}, () => {print("res4: 偶数")});
}

(2)kotlin

  • 定义
kotlin 复制代码
fun checkOddNumber(num: Int, oddCallback: () -> Unit, evenCallback: () -> Unit) {
    if (num % 2 == 1) {
        oddCallback()
    } else {
        evenCallback()
    }
}
  • 使用
kotlin 复制代码
fun main() {

    checkOddNumber(1,
        oddCallback = {
            println("奇数")
        },
        evenCallback = {
            println("偶数")
        })
}

(3)java

  • 定义
java 复制代码
public class Test {

    void checkOddNumber(int num, Function<Void, Void> oddCallback, Function<Void, Void> evenCallback) {
        if (num % 2 == 1) {
            oddCallback.apply(null);
        } else {
            evenCallback.apply(null);
        }
    }
}
  • 使用
java 复制代码
public class Test {

    void checkOddNumber(int num, Function<Void, Void> oddCallback, Function<Void, Void> evenCallback) {
        if (num % 2 == 1) {
            oddCallback.apply(null);
        } else {
            evenCallback.apply(null);
        }
    }

    void main() {

        checkOddNumber(1, (t1) -> {
            System.out.println("奇数");
            return null;
        }, (t2) -> {
            System.out.println("偶数");
            return null;
        });
    }
}
相关推荐
4311媒体网4 小时前
C语言操作符全解析 C语言操作符详解
java·c语言·jvm
淡忘_cx4 小时前
使用Jenkins自动化部署spring-java项目+宝塔重启项目命令(2.528.2版本)
java·自动化·jenkins
毕设源码-钟学长4 小时前
【开题答辩全过程】以 基于SSM的孤儿救助信息管理系统设计与实现为例,包含答辩的问题和答案
java
独自破碎E4 小时前
【曼哈顿距离】BISHI25 最大 FST 距离
java·开发语言
苏涵.4 小时前
Java三大集合:List、Set、Map
java·开发语言
存在的五月雨4 小时前
Spring Security认证流程
java·开发语言·mysql
树码小子4 小时前
综合练习:验证码案例(1)总体设计
java·开发语言·spring
一只大侠的侠4 小时前
Flutter开源鸿蒙跨平台训练营 Day19自定义 useFormik 实现高性能表单处理
flutter·开源·harmonyos
一嘴一个橘子4 小时前
idea 执行 Maven 的 `clean`、`install`、`package` 等命令报错
java
Sylvia-girl4 小时前
线程通讯~
java