更新時間:2022-08-31 11:24:08 來源:動力節(jié)點 瀏覽1557次
我們已經(jīng)多次聽說過回調(diào)函數(shù),主要是在 JavaScript 中。
那么讓我們用 Java 進行一些函數(shù)式編程……
公共類回調(diào){
public static void getSalary(Consumer<Double> callback) {
雙倍工資 = 50_000.00;
系統(tǒng)。out .println("領(lǐng)取工資...");
// 回調(diào)我們的回調(diào)函數(shù)
callback.accept(salary);
}
public static void main(String... args) {
// 這里我們傳遞一個消費者函數(shù)
// 作為參數(shù)
getSalary ((salary) -> { System.out
.println ("Gross Salary :" + Salary); } ); } }
因此,我們的getSalary()函數(shù)將接受消費者double 類型且不返回任何內(nèi)容的函數(shù),這里我們使用Consumer<T> 函數(shù)接口,但 Java 中還有其他FunctionInterface。
現(xiàn)在讓我們在流程中添加更多內(nèi)容……所以當我們獲得 Salary 時,首先要做的就是從我們的工資中扣除稅款,所以讓我們實現(xiàn)它。
public static void deductTax(double GrossSalary, Consumer<Double> callback) {
System. out .println("扣稅...");
雙重征稅 = 5;// 5% 的總工資
雙倍 afterTax = GrossSalary * (100 - tax) / 100;
callback.accept(稅后);
}
public static void main(String... args) {
// 這里我們傳遞一個消費者函數(shù)
// 作為參數(shù)
getSalary ((grossSalary) -> { System.out
.println ("Gross Salary :" + GrossSalary); deductTax (grossSalary, (afterTaxSalary) -> { System.out .println ("稅后:" + afterTaxSalary); }); }); }
在這里,我們創(chuàng)建了新函數(shù)deductTax()用于從工資總額中扣除稅款,它將接受工資總額和另一個回調(diào)函數(shù)作為參數(shù)。它將從總工資中扣除稅款并將其傳遞回我們的回調(diào)函數(shù)。
讓我們再添加一個函數(shù)來從我們的稅后工資中支付租金。
public static void payRent(double afterTaxSalary, Consumer<Double> callback) {
System. out .println("付房租...");
雙倍租金 = 20_000.00;
double afterRent = afterTaxSalary - 租金;
callback.accept(afterRent);
}
public static void main(String... args) {
// 這里我們傳遞一個消費者函數(shù)
// 作為參數(shù)
getSalary ((grossSalary) -> { System.out
.println ("Gross Salary :" + GrossSalary); deductTax (grossSalary, (afterTaxSalary) -> { System.out .println ("稅后:" + afterTaxSalary); payRent (afterTaxSalary, ( afterRentPayment ) -> { System.out .println ("租金后:" + afterRentPayment); } ); }); }); }
看,很容易將函數(shù)作為參數(shù)傳遞并從執(zhí)行函數(shù)中回調(diào)它。
為什么要使用回調(diào),回調(diào)很容易進行單元測試,因為我們可以將任何函數(shù)作為回調(diào)傳遞給函數(shù)參數(shù)。如果我們想在完成一些異步任務后執(zhí)行某個進程,那么我們可以傳遞回調(diào)函數(shù),這樣在完成一些異步任務后它會回火我們的回調(diào)函數(shù)。
這是我們回調(diào)類的完整源代碼。
公共類回調(diào){
public static void getSalary(Consumer<Double> callback) {
雙倍工資 = 50_000.00;
系統(tǒng)。out .println("領(lǐng)取工資...");
// 這里可以做一些工作...比如db call, api call
// 回調(diào)我們的回調(diào)函數(shù)
callback.accept(salary);
}
public static void deductTax(double GrossSalary, Consumer<Double> callback) {
System. out .println("扣稅...");
雙重征稅 = 5;// 5% 的總工資
雙倍 afterTax = GrossSalary * (100 - tax) / 100;
// 這里可以做一些工作...比如通知稅務局
// 回調(diào)我們的回調(diào)函數(shù)
callback.accept(afterTax);
}
public static void payRent(double afterTaxSalary, Consumer<Double> callback) {
System. out .println("付房租...");
雙倍租金 = 20_000.00;
double afterRent = afterTaxSalary - 租金;
// 這里可以做一些工作...比如通知地主
// 回調(diào)我們的回調(diào)函數(shù)
callback.accept(afterRent);
}
public static void main(String... args) {
// 這里我們傳遞一個消費者函數(shù)
// 作為參數(shù)
getSalary ((grossSalary) -> { System.out
.println ("Gross Salary :" + GrossSalary); deductTax (grossSalary, (afterTaxSalary) -> { System.out .println ("稅后:" + afterTaxSalary); payRent (afterTaxSalary, ( afterRentPayment ) -> { System.out .println ("租金后:" + afterRentPayment); } ); }); }); } }
以上就是關(guān)于“Java回調(diào)函數(shù)的例子”介紹,大家如果想了解更多相關(guān)知識,不妨來關(guān)注一下動力節(jié)點的Java在線學習,里面的課程內(nèi)容細致全面,很適合零基礎(chǔ)的小白學習,相信對大家一定會有所幫助的。