<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Jcat
    寵辱不驚,閑看庭前花開花落~~
    posts - 173,comments - 67,trackbacks - 0

    1. 閉包代表(定義)了一段代碼(操作):光看這一句,其實方法也能實現相同的功能呀。
    2. 閉包可以作為方法的參數:這才是閉包的特殊之處和真正意義。


    下面演示一個只有閉包能做,方法做不到的例子。

    方法的作用是提煉共性,再代之以不同的參數。即對不同的“數據”進行相同的“操作”。從3個loop可以看出:
    ????Comm1:相同的數據
    ????Comm2:相同的for循環
    ????Diff1:循環體內執行的操作不同

    Comm1很好搞定,參數aa就是提煉出的共性
    Comm2看似是共性,卻很難提煉,因為for循環和循環體內的操作實際是一個整體;Comm2被Diff1糾纏,3個loop是完全不同的3組操作,無法提煉。

    比如,如果現在想要按照奇數循環,只能依次改動三個循環。?

    int []?aa? = ?[ 1 ,? 2 ,? 3 ,? 4 ,? 5 ,? 6 ]

    // ?loop1
    for ?( int ?i? = ? 0 ;?i? < ?aa.length;?i ++ )?{
    ????println?aa[i]
    }

    // ?loop2
    for ?( int ?i? = ? 0 ;?i? < ?aa.length;?i ++ )?{
    ????print?aa[i]
    }

    // ?loop3
    for ?( int ?i? = ? 0 ;?i? < ?aa.length;?i ++ )?{
    ????print?aa[i]?
    + ? ' ? '
    }
    ????????

    // ?loop1
    for ?( int ?i? = ? 0 ;?i? < ?aa.length;?i? += ? 2 )?{
    ????println?aa[i]
    }

    // ?loop2
    for ?( int ?i? = ? 0 ;?i? < ?aa.length;?i? += ? 2 )?{
    ????print?aa[i]
    }

    // ?loop3
    for ?( int ?i? = ? 0 ;?i? < ?aa.length;?i? += ? 2 )?{
    ????print?aa[i]?
    + ? ' ? '
    }


    下面我們看看閉包的強大之處,Comm1和Comm2都被很好的封裝在了loop方法里;Diff1則作為參數(閉包)傳入loop方法。

    static?void?main(String[]?a)?{
    ????
    int[]?aa?=?[1,?2,?3,?4,?5,?6]

    ????loop(aa)?{?println?it }
    ??? loop(aa)?{?print?it?}???
    ??? loop(aa)?{?print?it?
    +?'?'?}
    }
    如果我們想要改變循環的方式,只需要改一處
    static?void?loop(int[]?aa,?Closure?c)?{
    ????
    for?(int?i?=?0;?i?<?aa.length;?i++)?{
    ????????c.call(aa[i])
    ????}
    ????println?
    '?'
    }
    static?void?loop(int[]?aa,?Closure?c)?{
    ????
    for?(int?i?=?0;?i?<?aa.length;?i?+=?2)?{
    ????????c.call(aa[i])
    ????}
    ????println?
    '?'
    }

    總結,閉包本身并沒什么難點,關鍵是怎樣合理的設計一個接受Closure類型參數的方法。從GDK的方法也可以看出,大多數接受閉包的方法都是和數組迭代有關(也即循環)。
    posted on 2008-11-07 02:04 Jcat 閱讀(1546) 評論(2)  編輯  收藏 所屬分類: Java

    FeedBack:
    # re: Groovy Closure “操作”也成了參數[未登錄]
    2008-11-07 20:11 | 咖啡
    這個很熟悉. 好像有其他哪個語言類似的.   回復  更多評論
      
    # re: Groovy Closure “操作”也成了參數
    2008-11-07 21:37 | Jcat
    很多動態語言都有,如Ruby。Groovy正是借鑒了其它動態語言,將閉包引入了Java。另外,現在也正在討論,是否要在JDK7中加入閉包。  回復  更多評論
      
    主站蜘蛛池模板: 毛片网站免费在线观看| 成人性生交大片免费看中文| 中文字幕无码不卡免费视频| 亚洲黄色三级网站| 91精品手机国产免费| 亚洲成a人片在线观看中文动漫 | 在线看片v免费观看视频777| 78成人精品电影在线播放日韩精品电影一区亚洲 | 免费一级一片一毛片| 菠萝菠萝蜜在线免费视频| 国产色爽女小说免费看| 羞羞视频在线观看免费| 色噜噜亚洲精品中文字幕| 免费网站观看WWW在线观看| 久久久亚洲精品国产| 91频在线观看免费大全| 国产精品亚洲自在线播放页码| 成年人免费视频观看| 一区二区免费国产在线观看| 亚洲va无码手机在线电影| 黄+色+性+人免费| 亚洲av日韩专区在线观看| jlzzjlzz亚洲乱熟在线播放| av永久免费网站在线观看 | 亚洲AV无码乱码国产麻豆| 在线看片免费人成视久网| 亚洲日韩一区精品射精| 亚洲福利中文字幕在线网址| 成人无码a级毛片免费| 亚洲妓女综合网99| 免费国产高清视频| 在线观看片免费人成视频无码| 亚洲另类精品xxxx人妖| 亚洲 自拍 另类小说综合图区| 四虎国产精品免费永久在线| 亚洲五月综合网色九月色| xvideos亚洲永久网址| 99久久精品免费视频| 亚洲AV无码片一区二区三区| 亚洲AV无码一区东京热| 午夜视频免费观看|