成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

分析Java中的閉包與回調(diào)方法

開發(fā) 后端
本文介紹的是java中的閉包和回調(diào)方法,希望對你有幫助,一起來看。

關(guān)于閉包,我們之前介紹過相關(guān)的一些文章,比如:《Javascript閉包(closure) 深入淺出》、《C#中的閉包是怎么捕獲變量的》和《深入理解Perl閉包及其應(yīng)用》,大家可以對比著看一下,供參考。

閉包是一個可調(diào)用的對象,它記錄了一些信息,這些信息來自于創(chuàng)建他的作用域,用過這個定義 可以看出內(nèi)部類是面向?qū)ο蟮拈]包 因為他不僅包含外圍類對象的信息 還自動擁有一個指向此外圍類對象的引用 在此作用域內(nèi) 內(nèi)部類有權(quán)操作所有的成員 包括private成員;

Java代碼

 

  1. interface Incrementable  
  2. {  
  3. void increment();  
  4. }  
  5. class Callee1 implements Incrementable  
  6. {  
  7. private int i=0;  
  8. public void increment()  
  9. {  
  10. i++;  
  11. System.out.println(i);  
  12. }  
  13. }  
  14. class MyIncrement  
  15. {  
  16. void increment()  
  17. {  
  18. System.out.println("other increment");  
  19. }  
  20. static void f(MyIncrement mi)  
  21. {  
  22. mi.increment();  
  23. }  
  24. }  
  25. class Callee2 extends MyIncrement  
  26. {  
  27. private int i=0;  
  28. private void incr()  
  29. {  
  30. i++;  
  31. System.out.println(i);  
  32. }  
  33. private class Closure implements Incrementable //內(nèi)部類  
  34. {  
  35. public void increment()  
  36. {  
  37. incr();  
  38. }  
  39. }  
  40. Incrementable getCallbackReference()  
  41. {  
  42. return new Closure(); //新建內(nèi)部類  
  43. }  
  44. }  
  45. class Caller  
  46. {  
  47. private Incrementable callbackRefference;  
  48. Caller(Incrementable cbh)  
  49. {  
  50. callbackRefference = cbh;  
  51. }  
  52. void go()  
  53. {  
  54. callbackRefference.increment();//調(diào)用increment()方法  
  55. }  
  56. }  
  57. public class Callbacks  
  58. {  
  59. public static void main(String [] args)  
  60. {  
  61. Callee1 c1=new Callee1();  
  62. Callee2 c2=new Callee2();  
  63. MyIncrement.f(c2);  
  64. Caller caller1 =new Caller(c1);  
  65. Caller caller2=new Caller(c2.getCallbackReference());//將內(nèi)部類中的Closure賦給Caller  
  66. caller1.go();  
  67. caller1.go();  
  68. caller2.go();  
  69. caller2.go();  
  70. }  

 

輸出:

other increment

1

2

1

2

Callee2 繼承字MyIncrement 后者已經(jīng)有一個不同的increment()方法并且與Incrementable接口期望的increment()方法完全不相關(guān) 所以如果Callee2繼承了MyIncrement 就不能為了Incrementable的用途而覆蓋increment()方法 于是這能使用內(nèi)部類獨(dú)立的實(shí)現(xiàn)Incrementable

內(nèi)部類Closure實(shí)現(xiàn)了Incrementable 一提供一個放回Caller2的鉤子 而且是一個安全的鉤子 無論誰獲得此Incrementbale的引用 都只能調(diào)用increment() 除此之外沒有其他功能。

希望通過本文的介紹,能給你帶來幫助。

【編輯推薦】

  1. 詳細(xì)介紹Java EE開發(fā)四大常用框架
  2. Java 多線程同步問題的探究(一)
  3. Java 多線程同步問題的探究(二)
  4. 簡單介紹Java EE容器
  5. 揭開Java EE開發(fā)框架之謎

責(zé)任編輯:于鐵 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2012-11-29 10:09:23

Javascript閉包

2016-11-01 09:18:33

Python閉包

2023-11-02 08:53:26

閉包Python

2024-01-22 09:51:32

Swift閉包表達(dá)式尾隨閉包

2010-06-29 08:39:25

Python閉包

2012-02-01 10:33:59

Java

2023-11-10 16:31:31

2021-10-26 13:18:52

Go底層函數(shù)

2011-05-12 18:26:08

Javascript作用域

2009-07-22 07:43:00

Scala閉包

2020-08-11 09:47:30

JS閉包代碼

2010-06-13 14:44:26

Java 7閉包Lambda表達(dá)式

2021-01-14 07:52:24

JavaScript回調(diào)函數(shù)

2022-04-18 08:34:29

回調(diào)函數(shù)命令解析

2023-10-26 07:47:35

JavaScript代碼變量

2020-02-12 16:58:15

JavaScript前端技術(shù)

2011-08-24 17:09:35

LUA閉包函數(shù)

2021-02-21 16:21:19

JavaScript閉包前端

2016-09-14 09:20:05

JavaScript閉包Web

2009-07-24 17:30:37

Javascript閉
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产精品观看 | 日本不卡免费新一二三区 | 日韩一区二区在线视频 | 欧美日韩高清 | 日韩在线观看一区 | 成人影院网站ww555久久精品 | 免费av电影网站 | 日本成人区 | 欧美一级二级视频 | 成人精品视频在线观看 | 欧美精品1区 | 九色在线 | 精品国产一区二区三区久久久四川 | 国产精品福利视频 | aaa综合国产 | 亚洲成av人片在线观看无码 | 在线免费观看视频黄 | 日韩国产中文字幕 | 亚洲成人免费视频在线观看 | 99精品欧美一区二区三区综合在线 | 国产一区二区视频免费在线观看 | www精品 | 日韩精品一区二区三区第95 | 国产一区二区三区四区 | 99精品在线观看 | 91豆花视频 | 欧美一级淫片免费视频黄 | 久久一区二区免费视频 | 日韩中文字幕一区 | 欧美一级片在线看 | 你懂的av| 福利视频一区二区 | 成人一区二区三区在线观看 | 欧美舔穴 | 一区二区三区四区av | 国产一区二区欧美 | 久久精品国产免费 | 精品国产色 | 成人欧美一区二区三区 | 一区二区三区精品视频 | 久草中文在线 |