zoukankan      html  css  js  c++  java
  • Groovy

    有别于java的一些方面

    • Groovy 可以省略分号和修饰符(类以及方法的修饰符)。

    • 默认情况下,Groovy 的所有内容都为 public。

    • Groovy 允许定义简单脚本,同时无需定义正规的 class 对象。比如可以通过 groovyconsole打开groovy的控制台,可以直接跑

        println "hello"
      
    • Groovy 在普通的常用 Java 对象上增加了一些独特的方法和快捷方式,使得它们更容易使用。比如对于集合的操作。

    • Groovy 语法还允许省略变量类型,具有类型推断,可以很据具体指推断出变量的类型,难以推断时也可以把变量当成Object。 无类型导致groovy不需要使用接口或者抽象类。

    • 方法的默认值:可以给方法设置默认值 eg: def addFun(a, b=4)

    集合相关的操作

    • 范围也算集合:

        def range = 0..4
        range instanceof List
      
    • def listDemo = ["aa", "bb", "cc"] 其实就是一个java里面的ArrayList

    • list相关的操作:

      • 赋值操作:
        • listDemo("dd")
        • listDemo << "ee"
        • listDemo[5] = "ff"
      • 取值操作:
        • listDemo[2] == "cc"
      • 对集合元素的增减操作
        • def numbers = [1,2,3,4]
        • numbers + 5 == [1,2,3,4,5]
        • numbers - [1,2] == [3,4]
      • 便捷的转换方法:
        • numbers.join(",") == "1,2,3,4"
        • [1,2,3,4,4].count(4) == 2
    • map相关的:

      • def mapDemo = [name:"Allen", age:"18"]
      • 赋值操作:
        • mapDemo.put("id", 2015), 这种写法,key需要“”。
        • mapDemo.id = "2015" 这种写法,key不需要“”, 但是groovy会把它转化成String类型.
          *取值操作
        • 使用 . 的操作,也可以进行取值操作。eg: mapDemo.id == "2015"
        • mapDemo["name"] == "Allen" , 使用[]取值的话,key需要使用String

    闭包

    • 对集合的操作

        def userList = ["allen", "mike", "jack"]
        userList.each{
        	println it
        }
        //it 默认是迭代的对象,也可以重新指定key,如下
        userList.each{user ->
        println user
        }	
        
        //当然如果是想遍历一个map的话,也类似
        def mapDemo = [name:"Allen", age:"18"]
        mapDemo.each{key, value ->
        println "${key} = ${value]"
        }
      
    • 一个闭包也是一个变量

        def sayHello = { name ->
        	return "Hello! ${name}"
        }
        //闭包的两种调用方式
        assert "Hello! Allen" == sayHello("Allen")
        assert "Hello! Allen" == sayHello("Allen").call()
      

    对类的操作

    • 会自动拥有 getter/setter 方法 和构造函数

    • 属性都可以使用 def来定义,而且都是私有的, 自动拥有的方法中的参数类型是 Object类型。

    • 如果是写一个override的方法,需要显示的写明返回类型

      • 最简单的一个类的定义如下:

          class User {
          	def name
          	def age
          	def id
          }			
        
      • 直接使用构造函数

          def userInstant = new User("Allen", 18, "2015")
        
      • 赋值:

          userInstant.name = "Allen"
          userInstant.setName("Allen") 
        
      • groovy里面的方法调用支持不写括号,上面这句赋值语句可以写成:

          userInstant.setName "Allen"      //这样写,个人感觉不利于读代码
        
      • 取值:

          assert userInstant.name == "Allen"
          assert userInstant.getName() == "Allen"
        

    方法返回值以及对于NPE的处理

    • groovy 里面方法的返回值如果不显示的写return语句,则最后一行语句作为返回值

        String hello(name){
        	"Hello! ${name}"
        }		
        //这个hello()方法体中并没有出现return, groovy会把 “Hello! ${name}”作为返回值,并且也可以表明这个方法的返回类型是 String
      
    • groovy对于非空的的判断,只需要简单的加一个问号 ?就可以了

        //比如在写了一个 getName() 的方法如下:
        
        def getUserUpCaseName(){
        	userInstant.name.toUpperCase()
        }
        
        //如果在调用这个方法的时候 userInstant中的name属性还没有赋值,那么显然会出现NPE的问题。
        //在groovy里面我们可以写成下面这样,就没有问题了
        
        def getUserUpCaseName(){
        	userInstant.name?.toUpperCase()
        }
    老司机带你飞
  • 相关阅读:
    TP5手动引入PHPEXCEL的方法
    分库分表的基本思想
    FIFO、LRU、LFU的含义和原理
    Memcache 内存分配策略和性能(使用)状态检查
    php soapclient 超时 设置
    jsonrpc.js -- 原生js实现 JSON-RPC 协议
    前端编译原理 笔记 -- BISON
    前端编译原理 移进规约自动机
    前端编译原理 parser.js源码解读
    react-rotuer动态加载模块
  • 原文地址:https://www.cnblogs.com/egg-lee/p/4597098.html
Copyright © 2011-2022 走看看