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()}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述