zoukankan      html  css  js  c++  java
  • Groovy语言学习--语法基础(3)

    侧重点可能是groovy metaClass基元类的概念,有点像java的反射,因为java反射目前基本也没研究过,就mark一下,后续若有用到就深入研究一下。

    基础语法的东西貌似差不多八九不离十了,后面再写个语法基础(4) 就准备将groovy脚本和java的融合研究一下,深入研究一下其作为脚本如何完成规则引擎的一些职责。

    package groovy.model
    
    
    /*class Test3 {
    
    }*/
    
    
    def map = [key1:"john",key2:"tom",key3: "rose"]
    map.each { println it }
    
    map.each({key,value -> println "$key : $value"})
    
    /*
     * 使用默认构造方法实例化Person类
     */
    
    def person1 = new Person()
    
    person1.setName("lucky")
    person1.setAge(20)
    person1.name = "jack"
    println person1
    /*
     * groovy 风格
     */
    def person2 = new Person(['name':'gaga','age':22])
    println person2
    
    /*
     * java代码 防止空指针
     */
    if(person2 !=null) {
        
        println "check right"
    }
    
    /*
     * groovy 代码防止空指针
     */
    
    person2?. println "welcome no null point"
    
    /*
     * 可变长参数 在调用的的时候可以使用任意个数的参数
     */
    int sum(int...var) {
        def total = 0
        for(i in var) {
            total +=i    
        }
        return total
    }
    println sum(1,2,2)
    
    /*
     *枚举 
     */
    enum Day{
        SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
    
        THURSDAY, FRIDAY, SATURDAY
    }
    
    println Day.FRIDAY
    /*
     * 同java5一样,groovy支持带构造器、属性和方法的enum
     */
    enum Planet{
        MERCURY(3.303e+23,2.49376e6),
        MARS(3.303e+23,2.49376e6),
        EARTH(5.976e+24, 6.37814e6)
        
        double mass
        double radius
        Planet(double mass,double radius) {
            this.mass = mass
            this.radius = radius
        }
        
        void printMe() {
            println "${name()} has a mass of ${mass} and a radius of ${radius}"
        }
    }
    
    Planet.EARTH.printMe()
    /*
     * 可以.方法查看enum相关的api 有很多
     */
    println Planet.EARTH.name()
    
    /*
     * metaClass 元类 通过元类,可以为对象增加方法 体现为groovy的动态性
     */
    def message = "hello world"
    print message.metaClass
    
    //message.metaClass.methods.each { println it.name }
    //message.metaClass.properties.each {println it.getKey()} 
     
      
  • 相关阅读:
    学习进度表
    数据结构思维导图
    数据结构笔记(树与二叉树)
    图片链接缝隙(a于img) mn
    如何用div实现(滑动条)侧边导航栏 mn
    去除Linux文件中的注释行和空行 mn
    高度塌陷 mn
    初入HTML5
    bcp命令详解转载
    windows 下andriod 开发环境的搭建
  • 原文地址:https://www.cnblogs.com/slowcity/p/10162185.html
Copyright © 2011-2022 走看看