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()
      }

转载于:https://www.cnblogs.com/egg-lee/p/4597098.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值