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;
        });
    }
}
相关推荐
光影少年4 小时前
Flutter生态及学习路线
学习·flutter
Code blocks4 小时前
SpringBoot自定义请求前缀
java·spring boot·后端
消失的旧时光-19434 小时前
Android回退按钮处理方法总结
android·开发语言·kotlin
Jabes.yang4 小时前
Java求职面试:从Spring Boot到Kafka的技术探讨
java·spring boot·面试·kafka·互联网大厂
canonical_entropy5 小时前
DDD本质论:从哲学到数学,再到工程实践的完整指南之实践篇
java·后端·领域驱动设计
_Power_Y5 小时前
Java面试常用算法api速刷
java·算法·面试
纪莫5 小时前
技术面:Spring (事务传播机制、事务失效的原因、BeanFactory和FactoryBean的关系)
java·spring·java面试⑧股
红衣小蛇妖5 小时前
LeetCode-704-二分查找
java·算法·leetcode·职场和发展
!chen6 小时前
【Spring Boot】自定义starter
java·数据库·spring boot
koko426 小时前
天津小公司面经
java·学习·面试