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

分析Java中的閉包與回調方法

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

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

閉包是一個可調用的對象,它記錄了一些信息,這些信息來自于創建他的作用域,用過這個定義 可以看出內部類是面向對象的閉包 因為他不僅包含外圍類對象的信息 還自動擁有一個指向此外圍類對象的引用 在此作用域內 內部類有權操作所有的成員 包括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 //內部類  
  34. {  
  35. public void increment()  
  36. {  
  37. incr();  
  38. }  
  39. }  
  40. Incrementable getCallbackReference()  
  41. {  
  42. return new Closure(); //新建內部類  
  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();//調用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());//將內部類中的Closure賦給Caller  
  66. caller1.go();  
  67. caller1.go();  
  68. caller2.go();  
  69. caller2.go();  
  70. }  

 

輸出:

other increment

1

2

1

2

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

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

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

【編輯推薦】

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

責任編輯:于鐵 來源: 互聯網
相關推薦

2012-11-29 10:09:23

Javascript閉包

2016-11-01 09:18:33

Python閉包

2023-11-10 16:31:31

2023-11-02 08:53:26

閉包Python

2010-06-29 08:39:25

Python閉包

2024-01-22 09:51:32

Swift閉包表達式尾隨閉包

2012-02-01 10:33:59

Java

2021-10-26 13:18:52

Go底層函數

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表達式

2021-01-14 07:52:24

JavaScript回調函數

2022-04-18 08:34:29

回調函數命令解析

2023-10-26 07:47:35

JavaScript代碼變量

2021-02-21 16:21:19

JavaScript閉包前端

2009-11-09 15:58:07

WCF回調方法

2020-02-12 16:58:15

JavaScript前端技術

2016-09-14 09:20:05

JavaScript閉包Web

2009-07-24 17:30:37

Javascript閉
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩成人免费视频 | 91成人小视频 | 亚洲视频在线观看 | 国产探花在线观看视频 | 一级黄色淫片 | 国产剧情一区 | 亚洲最色视频 | 亚洲一区精品在线 | 国产精品一区在线 | 在线中文字幕亚洲 | 国产一级淫片免费视频 | 成人免费网视频 | av日韩一区 | 激情免费视频 | 99这里只有精品视频 | 视频二区在线观看 | 成人av资源在线 | www.av在线| 国产中文字幕在线 | 久久久久国产成人精品亚洲午夜 | 精品亚洲一区二区三区 | 精品1区| 国产高清视频一区 | 九九久久久| 中文字幕在线第一页 | 91中文字幕 | 在线观看国产91 | 亚洲精品粉嫩美女一区 | 色婷婷久久综合 | 久久69精品久久久久久国产越南 | 黄色毛片一级 | 国产在线一区二区 | 欧美一区二区三区国产精品 | 91偷拍精品一区二区三区 | 欧美日韩国产在线观看 | 成人免费视屏 | 国产乱码精品1区2区3区 | 日韩国产精品一区二区三区 | 欧美极品一区二区 | 97国产在线观看 | 欧美另类视频 |