当前位置:网站首页>[groovy] closure (Introduction to closure class closure | closure parametertypes and maximumnumberofparameters member usage)

[groovy] closure (Introduction to closure class closure | closure parametertypes and maximumnumberofparameters member usage)

2022-07-05 04:40:00 Programmer community

List of articles

  • One 、 Closure class Closure brief introduction
  • Two 、 Closure parameterTypes and maximumNumberOfParameters Member usage
  • 3、 ... and 、 Complete code example

One 、 Closure class Closure brief introduction


Closure is Closure object , Closure There are many members in the class , And encapsulated functions , Here is Closure Class inheritance structure ;

/** *  stay  Groovy  Represents any closure object  . * <p> * Groovy Allow closure instances to be called in a short form . for example : * <pre> * def a = 1 * def c = { a } * assert c() == 1 * </pre> *  In order to be able to use closures in your own subclasses in this way , *  You need to provide a with any signature you want doCall Method . *  This ensures that the {@link#getMaximumNumberOfParameters()} *  and {@link#getParameterTypes()} stay  *  It works without any extra code . *  If not provided doCall Method , You must use closures in long form , Such as  * <pre> * def a = 1 * def c = {a} * assert c.call() == 1 * </pre> * * @author <a href="mailto:[email protected]">James Strachan</a> * @author <a href="mailto:[email protected]">John Wilson</a> * @author <a href="mailto:[email protected]">Jochen Theodorou</a> * @author Graeme Rocher * @author Paul King */public abstract class Closure<V> 		extends GroovyObjectSupport 		implements Cloneable, Runnable, GroovyCallable<V>, Serializable { 
    }

Two 、 Closure parameterTypes and maximumNumberOfParameters Member usage


stay Closure class Closure in , There are the following

2

2

2 Members :

    protected Class[] parameterTypes;    protected int maximumNumberOfParameters;

Class[] parameterTypes Is a parameter type , int maximumNumberOfParameters Is the maximum number of parameters required , When invoking closures , When you don't know what type of parameters to pass to a closure , Do not know how many parameters are passed , You can use Above

2

2

2 Members ;

The following code , Define a closure :

//  Define closure //  The closure receives  2  Parameters def closure = { 
        int a, String b ->}

If you use closure Closure time , I don't know what type of parameters the closure receives , And the number of parameters , have access to println Print closure parameters ;

Print parameter type : Above

2

2

2 Parameters , The printed result is [int, class java.lang.String] ;

//  Print parameter type println closure.parameterTypes

Number of print parameters :

//  Number of print parameters println closure.maximumNumberOfParameters

3、 ... and 、 Complete code example


Complete code example :

//  Define closure //  The closure receives  2  Parameters def closure = { 
        int a, String b ->}//  Print parameter type println closure.parameterTypes//  Number of print parameters println closure.maximumNumberOfParameters

Execution results :

[int, class java.lang.String]2

 Insert picture description here

原网站

版权声明
本文为[Programmer community]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202140632099803.html