生活随笔
收集整理的這篇文章主要介紹了
java函数回调
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、本質(zhì)
函數(shù)回調(diào)本質(zhì)就是:通過傳遞引用來調(diào)用引用指定對(duì)象的方法,回調(diào)方法一定涉及兩個(gè)類,通過方法參數(shù)接收另外一個(gè)類的引用來調(diào)用另外一個(gè)類的方法,其實(shí)就是一個(gè)函數(shù)的參數(shù)是某個(gè)接口的實(shí)現(xiàn)類
二、代碼直接解釋
基礎(chǔ)需求,讓室友幫忙寫作業(yè)代碼
public class RoomMate {public String
getAnswer(String homework
) {if("1+1=?".equals(homework
)) {return "2";} else {return null
;}}public void getAnswer(String homework
, Student student
) {if("1+1=?".equals(homework
)) {student
.doHomeWork(homework
, "2");} else {student
.doHomeWork(homework
, "(空白)");}}public void getAnswer(String homework
, Work work
) {if("1+1=?".equals(homework
)) {work
.doHomeWork(homework
,"2");} else {work
.doHomeWork(homework
,"(空白)");}}public void getAnswerMyWork(String homework
, Work work
) {System
.out
.println("question is "+homework
);work
.doHomeWorkWithoutParam();}public void askDifficult(String homework
, Work work
) {System
.out
.println("question is "+homework
);work
.doHomeWorkWithoutParam();}
}
public interface Work {default void doHomeWork(String question
, String answer
){}default void doHomeWorkWithoutParam(){};
}
public class WorkImpl implements Work{@Overridepublic void doHomeWork(String question
,String answer
) {if(question
!= null
) {System
.out
.println("作業(yè):"+question
+" 答案:"+ 2);} else {System
.out
.println("作業(yè):"+question
+" 答案:"+ "(空白)");}}
}
public class Student{public void doHomeWork(String homeWork
, String answer
) {System
.out
.println("student.doHomeWork");System
.out
.println("作業(yè):" + homeWork
+ " 答案:" + Objects
.requireNonNullElse(answer
, "(空白)"));}private static void goHome() {System
.out
.println("我先回家");}public static void main(String
[] args
) throws InterruptedException
{Student student
= new Student();String aHomeWork
= "1+1=?";RoomMate roomMate
= new RoomMate();String theAnswer
= roomMate
.getAnswer(aHomeWork
);student
.doHomeWork(aHomeWork
, theAnswer
);roomMate
.getAnswer(aHomeWork
,student
);WorkImpl workImpl
= new WorkImpl();roomMate
.getAnswer(aHomeWork
, workImpl
);roomMate
.getAnswerMyWork(aHomeWork
, new Work() {@Overridepublic void doHomeWorkWithoutParam() {if (aHomeWork
!=null
){System
.out
.println("answer is 2");}}});String hardHomework
= "當(dāng)x趨向于0,sin(x)/x =?";new Thread(() -> roomMate
.askDifficult(hardHomework
, new Work() {@Overridepublic void doHomeWorkWithoutParam() {if ("1+1=?".equals(hardHomework
)) {System
.out
.println("作業(yè):" + hardHomework
+ " 答案:" + 2);} else if ("當(dāng)x趨向于0,sin(x)/x =?".equals(hardHomework
)) {System
.out
.print("思考:");for (int i
= 1; i
<= 3; i
++) {System
.out
.print(i
+ "秒 ");try {TimeUnit
.SECONDS
.sleep(1);} catch (InterruptedException e
) {e
.printStackTrace();}}System
.out
.println();System
.out
.println("作業(yè):" + hardHomework
+ " 答案:" + 1);} else {System
.out
.println("作業(yè):" + hardHomework
+ " 答案:" + "(空白)");}}})).start();goHome();}
}
參考文章
總結(jié)
以上是生活随笔為你收集整理的java函数回调的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。