【发布时间】:2021-12-13 20:00:03
【问题描述】:
我见过一些方法如下图:
这样调用:
private static void addCustomerTransaction() {
customerInput((bank, branchName, customerName, transaction) ->
bank.addCustomerTransaction(branchName, customerName, transaction));
}
private static void addCustomer() {
customerInput((bank, branchName, customerName, transaction) ->
bank.addCustomer(branchName, customerName, transaction));
}
或使用方法引用:
private static void addCustomerTransaction() {
customerInput(Bank::addCustomerTransaction);
}
private static void addCustomer() {
customerInput(Bank::addCustomer);
}
我读过这样的代码:当调用addCustomerTransaction() 方法时,它通过传递Bank 类的addCustomer 方法来调用customerInput 方法。但这似乎是一个递归调用。那么,这是什么意思,你能举一个简单的例子吗?
提前致谢。
【问题讨论】:
-
customerInput(Bank::addCustomerTransaction)基本上被翻译成(bank, branchName, customerName, transaction) -> bank.addCustomerTransaction(branchName, customerName, transaction)),因为它们具有相同的签名。问题是第一个参数bank是银行实例,addCustomerTransaction(String branchName, String customerName, Transaction transcation)(猜测参数类型)实际上有一个隐式的第一个this参数,即银行。所以这个方法不同于静态的addCustomerTransaction()。 -
这里还有一个相关主题的快速查找,希望能解释 Java 中不同风格的 lambda 和方法引用:geeksforgeeks.org/method-references-in-java-with-examples
-
@Thomas 非常感谢,但无法完全理解。也许我的例子不是一个合适的例子。你能用一个合适的例子作为答案来解释吗?
-
@M.Prokhorov 看起来很有用,非常感谢。
标签: java class lambda stream method-reference