当前位置: 首页 > article >正文

Javer学习Groovy

这里只记录一些groovy和java语法差异比较大的地方

  1. 方法调用不需要括号

  2. 访问控制默认是public而不是java中的default,并且属性名大写

  3. 范围运算(支持倒序和字母):[‘G’..‘B’]相当于['G','F','E','D','C','B']
  4. =~运算用于匹配左侧字符串是否满足右侧表达式:‘Groovy'=~'^G'
  5. trait的出现允许了多继承(trait既提供了方法的实现,还可以有成员变量)
  6. 存在隐式类型转换为boolean
  7. 可以通过[:]来定义映射

闭包。closure看上去是一块代码,像是匿名方法(允许参数,并且可以访问外部参数)。可以通过call来调用,其执行时以执行处变量的值为准(而不是定义时)

class Example {     
   static void main(String[] args) {
      def str1 = "Hello";
      def clos = {param -> println "${str1} ${param}"}
      clos.call("World");
		
      // We are now changing the value of the String str1 which is referenced in the closure
      str1 = "Welcome";
      clos.call("World");
   } 
}

在集合和映射中使用闭包,参数为it

class Example {
   static void main(String[] args) {
      def lst = [11, 12, 13, 14];
      lst.each {println it}

      def mp = ["TopicName" : "Maps", "TopicDescription" : "Methods in Maps"]             
      mp.each {println it}
      mp.each {println "${it.key} maps to: ${it.value}"}
   } 
}

通过实现GroovyInterceptable来处理缺失的属性和方法

class Example {
   static void main(String[] args) {
      Student mst = new Student();
      mst.Name = "Joe";
      mst.ID = 1;
		
      println(mst.Name);
      println(mst.ID);
      mst.AddMarks();
   } 
}
 
class Student implements GroovyInterceptable {
   protected dynamicProps = [:]  
    
   void setProperty(String pName, val) {
      dynamicProps[pName] = val
   } 
   
   def getProperty(String pName) {
      dynamicProps[pName]
   }
   
   def invokeMethod(String name, Object args) {
      return "called invokeMethod $name $args"
   }
}

使用metaClass来实现反射

class Example {
   static void main(String[] args) {
      Student mst = new Student();
      println mst.getName()
      mst.metaClass.setAttribute(mst, 'name', 'Mark')
      println mst.getName()
   } 
} 

另外可以通过methodMissing来处理缺失的方法

class Student implements GroovyInterceptable {
   protected dynamicProps = [:]  
    
   void setProperty(String pName, val) {
      dynamicProps[pName] = val
   }
   
   def getProperty(String pName) {
      dynamicProps[pName]
   }
   
   def methodMissing(String name, def args) {         
      println "Missing method"
   }  
}


http://www.kler.cn/a/441745.html

相关文章:

  • 网络通信---MCU移植LWIP
  • Android系统开发(六):从Linux到Android:模块化开发,GKI内核的硬核科普
  • Java 中 HashSet 集合元素的去重
  • Unity预制体未即时刷新
  • 微软预测 AI 2025,AI Agents 重塑工作形式
  • 如何在oracle关闭情况下如何修改spfile的参数
  • Chinese-Clip实现以文搜图和以图搜图
  • WPF Combox使用 Text无法选择正确获取CHange后的Text
  • java服务器中,如何判定是该使用单例系统,还是微服务架构,多库分布式,服务分布式,前端分布式
  • 2.Nuxt学习 组件使用和路由跳转相关
  • 关于SAP Router连接不稳定的改良
  • unity 雷达
  • SQL Server 表值函数使用示例
  • 负载均衡oj项目:介绍
  • mybatis的优化和补充
  • vue3修改elementui-plus的默认样式的几种方法
  • 基于Springboot + vue实现的手机商城系统
  • 弹窗组件嵌套弹窗组件问题
  • 基于Spring Boot的停车场管理系统
  • windows C#-如何实现和调用自定义扩展方法
  • 利用编程获得money?
  • HP服务器开启性能模式
  • 访问控制列表ACL
  • MyBatis框架的入门
  • websocket 服务 pinia 全局配置
  • 【后端面试总结】线程间通信的方法、特点与实现