zoukankan      html  css  js  c++  java
  • groovy学习8接口

    代码
    /**
    * @author <a href="mailto:zhangting@taobao.com">张挺</a>
    * @since 2010-4-6 11:12:33
    *
    */
    //Implement interfaces with a closure

    // a readable puts chars into a CharBuffer and returns the count of chars added,这个5是返回值-_-b
    def readable = { it.put("12 34".reverse()); 5} as Readable

    // the Scanner constructor can take a Readable
    def s = new Scanner(readable)
    assert s.nextInt()
    == 43

    //使用闭包实现多方法接口,闭包将会被每个接口调用,参数需要匹配
    interface X {
    void f();

    void g(int n);

    void h(String s, int n);
    }

    x
    = {Object[] args -> println "method called with $args"} as X
    x.f()
    x.g(
    1)
    x.h(
    "hello", 2)

    //Implement interfaces with a map

    impl
    = [
    i:
    10,
    hasNext: { impl.i
    > 0 },
    next: { impl.i
    -- },
    ]
    iter
    = impl as Iterator
    while (iter.hasNext())
    println iter.next()

    //You only need to implement those methods that are actually called,
    //
    but if a method is called that doesn't exist in the map a NullPointerException is thrown.
    //
    你只需要实现需要被调用的方法,但是一旦使用到没有实现的方法,就会报NPE
    x = [f: {println "f called"}] as X
    x.f()
    //x.g() // NPE here

    //Be careful that you don't accidentally define the map with { }
    //
    不要用{}来定义map,接口里的每个方法都会调用{}闭包
    x = { f: {println "f called"} } as X
    x.f()
    x.g(
    1)

    //class.forname得到的是interface的实例,而不是一种类型,可以用astype来取得接口类型
    def loggerInterface = Class.forName('my.LoggerInterface')
    def logger
    = [
    log: {Object[] params
    -> println "LOG: ${params[0]}"; if (params.length > 1) params[1].printStackTrace() },
    close: { println
    "logger.close called" }
    ].asType(loggerInterface)
  • 相关阅读:
    学习python第六天
    学习python第五天
    学习python第四天
    学习python第二天
    网工学Python——模块和包
    网工学Python——初识函数
    网工学Python——常用模块
    网工学Python——基础知识
    网工学Python——目录
    Python-面向对象
  • 原文地址:https://www.cnblogs.com/xiziyin/p/1705392.html
Copyright © 2011-2022 走看看