<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

    Definition

    ??? /*
    ????????1.?變量是用來裝“數據”的,閉包就是用來裝“操作”的
    ????????2.?和定義一個方法一樣,閉包也可以有入參
    ???????
    */
    ????????Closure?p?
    = ?{x? ->
    ????????????print?x?
    + ? ' ? '
    ????????}
    ????????[
    1 ,? 2 ,? 3 ].each(p)

    ????????[
    4 ,? 5 ,? 6 ].each({x? -> ? // ?閉包是可以匿名的
    ????????????print?x? + ? ' ? '
    ????????})

    ????????[
    7 ,? 8 ,? 9 ].each?{x? -> ? // ?括號是可以省略的
    ????????????print?x? + ? ' ? '
    ????????}

    ????????[
    10 ,? 11 ,? 12 ].each?{? // ?it是默認的參數名字,所以這里連入參的定義都省了
    ????????????print?it? + ? ' ? '
    ????????}


    Using

    package?jcat.bit

    class?Test?{
    ????
    /*
    ????1.?閉包是對象,是Closure類的實例,所以:
    ????????1)可以在類里定義Closure類型的屬性
    ????????2)可以在方法里定義Closure類型的變量
    ????????3)可以定義一個方法,接收Closure類型的參數
    ????2.?閉包又有方法特質,畢竟它裝的是“操作”,甚至可以像調用方法一樣調用閉包
    ?????
    */

    ????
    static?final?Closure?PRINT_STR?=?{??//?屬性(類變量)
    ????????println?it
    ????}


    ????
    static?void?main(String[]?a)?{
    ????????
    /*
    ????????閉包類似Java的內部類,區別是閉包只有單一的方法可以調用,但可以有任意的參數,
    ????????閉包用“{}”括起,“->”前面是參數,后面是處理語句,可以直接調用,也可以使
    ????????用call調用。不管那種調用,最后groovy編譯器都會把編譯成對doCall方法的調用,
    ????????這是groovy對閉包的一個隱藏方法。
    ?????????
    */
    ????????PRINT_STR(
    "像方法一樣調用")
    ????????PRINT_STR.call(
    "作為Closure的實例,再調用相應的方法")


    ????????Closure?printLength?
    =?{String?s?->??//?局部變量
    ????????????println?s.length()
    ????????}
    ????????printLength(
    "AAA")

    ????????
    /*
    ????????通常,操作是死的,我們能動態代入的是“數據”。
    ????????閉包使得我們可以動態的代入一段“操作”。
    ????????“閉包是可以用作方法參數的代碼塊?!?br />?????????
    */
    ????????closureAsParameter(
    null,?printLength)
    ????????closureAsParameter(
    "BBB",?PRINT_STR)
    ????}

    ????
    static?void?closureAsParameter(String?s,?Closure?c)?{
    ????????
    if?(s?!=?null)?{
    ????????????c.call(s)
    ????????}
    ????}
    }



    -----------------------------------------------------------------
    附上一個Java的匿名內部類的例子,用來和閉包對比一下。
    package?jcat.bit;

    public?class?AnonymousInnerClass?{
    ????
    public?static?void?main(String[]?args)?{
    ????????AbsClass?a?
    =?new?AbsClass()?{
    ????????????
    public?void?foo(String?s)?{
    ????????????????System.out.println(s);
    ????????????}
    ????????};

    ????????a.foo(
    "ABC");

    ????????AbsClass?b?
    =?new?AbsClass()?{
    ????????????
    public?void?foo(String?s)?{
    ????????????????System.out.println(s.length());
    ????????????}
    ????????};
    ????????b.foo(
    "ABC");
    ????}
    }

    abstract?class?AbsClass?{
    ????
    public?abstract?void?foo(String?s);
    }
    posted on 2008-11-06 18:50 Jcat 閱讀(363) 評論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 久久永久免费人妻精品下载| 亚洲AV日韩AV永久无码下载| 97国免费在线视频| 亚洲免费视频在线观看| 男女一进一出抽搐免费视频| 大学生美女毛片免费视频| 美女被艹免费视频| 亚洲男人天堂av| 免费二级毛片免费完整视频| 男人都懂www深夜免费网站| 亚洲av成人一区二区三区在线播放| 国产一卡2卡3卡4卡2021免费观看 国产一卡2卡3卡4卡无卡免费视频 | 亚洲Aⅴ无码一区二区二三区软件 亚洲AⅤ视频一区二区三区 | 亚洲AV无码乱码在线观看代蜜桃| 免费一级毛片清高播放| 69pao强力打造免费高清| 亚洲精品乱码久久久久久下载 | 免费一级成人毛片| 亚洲一级毛片免费在线观看| 久久久久亚洲精品日久生情| 91精品成人免费国产片| 激情吃奶吻胸免费视频xxxx| 久久精品亚洲一区二区三区浴池| 免费人成网站在线高清| 免费无码A片一区二三区| 免费视频精品一区二区三区 | 国产yw855.c免费视频| 黄色片在线免费观看 | 亚洲精品第一国产综合精品99| ww在线观视频免费观看w| 亚洲w码欧洲s码免费| 亚洲av无码一区二区乱子伦as| 1000部羞羞禁止免费观看视频| 国产福利免费视频| 亚洲伦理一区二区| 亚洲综合图色40p| 国产精品免费网站| 美女视频黄频a免费| 中文有码亚洲制服av片| 国产黄色一级毛片亚洲黄片大全| 日韩精品极品视频在线观看免费|