groovy定义变量获取当前时间_Groovy小记it关键字和IDE报错

news/2024/7/24 10:22:07 标签: groovy定义变量获取当前时间

在工作中经常写Groovy脚本,由于GroovyJava的亲戚关系,所以也就直接在「Intellij IDEA」工具上写了,一是因为方便,二是也找不到其他工具了。

但是在使用的过程中总会遇到一些兼容性的问题。「Intellij IDEA」对于Groovy的支持并不完美,大概也是Groovy语言特性过多的原因。我下载了一个Groovy检查的插件,依然还有漏网之鱼。下面分享一些大大小小的「坑」,以方便后来之人。

IDE报错

在使用Groovy语法特性的时候,经常会遇到标红和报错,但是「Intellij IDEA」依然会允许程序运行。但是在运行中可能会遇到错误,还得返回来检查,甚至有时候IDE还不会提示这个错误。所以我在写Groovy脚本时候,之前是更多偏重于用Java的语法。最近改变了自己的习惯之后,发现有一部分IDE报错其实没有问题的。例如下面的两个例子:

获取属性

Groovy获取属性有三种写法。

user.name
user["name"]
user.getName()

对的,你没有看错,第一个写法和第三个写法在Groovy里面包含了不同的含义,因为Groovy正常情况下没有getName()这个方法。至于第二种写法算是特殊的语法。

上面三个语法不仅是针对User对象,对于JSonobject依然适用,我在使用JsonPath工具实践的时候也经常用到。有兴趣可以参考以下文章:

  • JsonPath实践(一)
  • JsonPath实践(二)
  • JsonPath实践(三)
  • JsonPath实践(四)
  • JsonPath实践(五)
  • JsonPath实践(六)
  • JsonPath工具类封装
  • JsonPath工具类单元测试

但是第二种写法在「Intellij IDEA」里面就会被标红,提示出错。

泛型方法调用

这是是我在做性能测试的过程中遇到的,我在ThreadBase定义了一个对象public T t;,最开始的想法是用来处理线程私有数据对象的,但是后来发现其实直接新建类比较合适,就用的不多了。

有兴趣的可以参考以前的文章:

  • 性能框架多线程基类和执行类--视频讲解
  • 定时和定量压测模式实现--视频讲解
  • 基于HTTP请求的多线程实现类--视频讲解

先发一个第一种写法,也是我现在最常用的写法。

    static class TT extends ThreadLimitTimesCount {

        Mirro m

        int aid = 0

        public TT(Mirro mirro, int times) {
            super()
            this.m = mirro
            this.times = times
        }

        @Override
        protected void doing() throws Exception {
            def pre = m.createPre()
            if (aid == 0) {
                aid = pre.getJSONObject("data").getIntValue("activity_id")
            }
            m.delPre(aid)
        }
    }

再发一下之前的写法。

    static class TT extends ThreadLimitTimesCount {

        int aid = 0

        public TT(Mirro mirro, int times) {
            super()
            this.t = mirro
            this.times = times
        }

        @Override
        protected void doing() throws Exception {
            def pre = m.createPre()
            if (aid == 0) {
                aid = pre.getJSONObject("data").getIntValue("activity_id")
            }
            t.delPre(aid)
        }
    }

已经取消了Mirro这个属性,但是在最后会有报错,如图:

5e2c880951365773cf1719e43942b5c3.png

这种情况还会出现在def修饰的对象调用方法获取属性的时候,这个时候就需要「微微一笑」「由他去吧」

it关键字

Groovy语言中循环中,it关键非常有用,比如遍历一个String数组或者集合对象的话,直接用it就可以代表遍历到的String对象。举个例子:

        5.times {
            output(it)
        }

控制台输出:

INFO-> 当前用户:fv,IP:10.60.192.21,工作目录:/Users/fv/Documents/workspace/fun/,系统编码格式:UTF-8,系统Mac OS X版本:10.15.6
INFO-> 0
INFO-> 1
INFO-> 2
INFO-> 3
INFO-> 4

Process finished with exit code 0

今天遇到一个双层遍历的问题,突然发现不知道在双层遍历的情况下it关键字是否可以通用,也就是在外层遍历时候使用it,然后在内层遍历时候也用it,两个it表示不同的遍历对象。下面我们验证一下:

        3.times {
            output(it * 10)
            3.upto(5) {
                output(it)
            }
        }

控制台输出:


INFO-> 当前用户:fv,IP:10.60.192.21,工作目录:/Users/fv/Documents/workspace/fun/,系统编码格式:UTF-8,系统Mac OS X版本:10.15.6
INFO-> 0
INFO-> 3
INFO-> 4
INFO-> 5
INFO-> 10
INFO-> 3
INFO-> 4
INFO-> 5
INFO-> 20
INFO-> 3
INFO-> 4
INFO-> 5

Process finished with exit code 0

果然完美解决我的疑惑,不得不钦佩Groovy的设计者。


「公众号FunTester首发,原创分享爱好者,腾讯云和掘金社区首页推荐,知乎七级原创作者,欢迎关注、交流,禁止第三方擅自转载。」

FunTester热文精选

  • 写给所有人的编程思维
  • 2020年Tester自我提升
  • 未来的神器fiddler Everywhere
  • 测试开发工程师工作技巧
  • Selenium4 IDE,它终于来了
  • 如何成为全栈自动化工程师
  • 什么阻碍手动测试发挥价值
  • 压测中测量异步写入接口的延迟
  • “双花”BUG的测试分享
81385221fe15e0e7b3fd60889ce3856f.png

http://www.niftyadmin.cn/n/874939.html

相关文章

使用git 快速批量创建文件夹和js文件

第一个指令 //创建文件夹mkdir onefile twofile threefile $ mkdir onefile twofile threefile第二个指令 //创建js文件 touch onefile.js twofile.js threefile.js $ touch onefile.js twofile.js threefile.js效果如下

解决报错 This dependency was not found:(这个依赖没有找到)

错误的原因是你这个文件引入或使用了文件资源,但却没有找到 我是因为写样式使用了less,却没有依赖,所以把less删掉或是下less依赖就可以了 <style scoped langless></style>报错全部信息 ERROR Failed to compile with 1 errors 下午10:57:54 This dependency wa…

springboot test测试类_掌握 SpringBoot 这两个属性,测试类可以健步如飞!

作者&#xff1a;jwenjian转自&#xff1a;juejin.im/post/5e709f25f265da570c754d8d单元测试是项目开发中必不可少的一环&#xff0c;在 SpringBoot 的项目中&#xff0c;我们用 SpringBootTest 注解来标注一个测试类&#xff0c;在测试类中注入这个接口的实现类之后对每个方法…

SVN上传文件报错 Commit blocked by pre-commit hook (exit code 1) with output

我这里是因为忘记写comment信息了 参考文章 https://blog.csdn.net/yasi_xi/article/details/39450689

网页自动填写工具_网页表单级联下拉列表框自动填写方法

如上图所示&#xff0c;必须要按顺序选择省市区。未选择省之前&#xff0c;没有城市可选择&#xff0c;未选择城市之前&#xff0c;没有区可选择。代码如下&#xff1a;关键是怎样在自动填写省后&#xff0c;调出对应的市&#xff0c;填写市后&#xff0c;调出对应的区。在网页…

python解决实际问题案例_python 解决粘包问题案例

一&#xff0c;解决粘包问题案例A 服务端from socket import *import subprocessimport structphonesocket(AF_INET,SOCK_STREAM)phone.bind((127.0.0.1,8081))phone.listen(5)print(服务的启动......)# 连接循环while True:conn,client_addrphone.accept()print(client_addr)#…

项目管理模板_Excel项目管理模板V2.0

?点击关注Excel表哥公众号Excel表哥公众号推送的第一篇文章 如何用Excel制作一个高逼格的项目管理模板 累积获得了超多的下载量。下面是和读者朋友的一些交流互动&#xff1a;在使用过程中大家陆续也反馈了一些问题和建议。因此我们推出了项目管理模板V2.0 升级版&#xff01;…