Android Gradle开发与应用 (二) : Groovy基础语法
1. Groovy是什么
Groovy是基于JVM虚拟机的一种动态语言,语法和Java非常相似,并能够无缝地与Java代码集成和互操作,增加了很多动态类型和灵活的特性。(闭包、DSL)
语法和Java非常相似这个特点,意味着,如果我们完全不懂Groovy的语法,也可以按Java的语法来写Groovy代码。 这对于Java工程师来说是非常友好的。
不过,如果我们懂得一些Groovy的语法,那么对于Groovy的开发,会更加的方便和得心应手。以下是一些Groovy区别于Java的一些特性。

2. def类型推断
在 Groovy 编程语言中,def 关键字是一个非常灵活的声明符,它用于定义变量、方法或属性,并且允许类型推断。使用 def 时,编译器会根据所赋值的对象自动确定变量的类型,因此开发者不需要显式地指定变量的类型。
2.1 变量定义:
当你使用 def 声明一个变量时,Groovy 不需要知道变量的具体类型,它可以在运行时动态地决定变量的类型。
def a = 10 // a 将被推断为整数类型 Integer
def b = "Hello" // b 将被推断为字符串类型 String
2.2 可变类型:
使用 def 定义的变量可以改变其引用的对象类型,这是因为在 Groovy 中,变量本身没有固定的类型,而是指向了一个对象。
def c = true // c 被推断为布尔类型 Boolean
c = "World" // 现在 c 变成了字符串类型
2.3 方法定义:
在 Groovy 中,def 还可以用来定义方法(函数),此时方法返回的类型也是可以由编译器推断得出或者不返回任何值(void)。
def add(a, b) {return a + b
}
2.4 属性定义:
在类中定义属性时,也可以使用 def,这将创建一个具有隐式 getter 和 setter 的属性,其类型同样是动态推断的。
总之,def 关键字是 Groovy 动态特性的体现,它增强了代码的简洁性和灵活性,特别是在快速开发和脚本编写场景中表现尤为突出。不过,在大型项目或需要严格类型检查的情况下,可能需要更多地考虑是否使用明确类型的变量声明来增强代码的可读性和维护性。
3. 字符串
Groovy中的字符串和java中非常相似,还可以使用单引号''
task stringTest {String str1 = "hello"var str2 = "wrold"def str3 = "!"//print(str1 + str2 + str3)println("${str1} ${str2} " + str3)
}
4. 列表
列表可以直接用[]进行定义,遍历起来也非常方便
task listTest {def list = [5, 6, 7, 8, 9]println list[0]//遍历方式一for (int data in list) {println(data)}//遍历方式二for(int i in 0..4){println(list[i])}
}
5. Map
Map也是一样的,使用[key:value]的形式定义,遍历也非常方便
task mapTest() {def map = ["name": 'heiko', "age": 18]println map["name"]map.each {println itprintln it.key + ":" + it.value}
}task method {def a = methodA(3, 5)println(a)
}
6. 方法
groovy语法当中默认将函数非空(有代码的)最后一行作为结果进行返回
def methodA(int a, int b) {//groovy语法当中默认将函数非空(有代码的)最后一行作为结果进行返回a + b
}
7. 类
类的使用和Java中几乎一样
class Student {private String nameprivate int ageprivate String getName() {return name}private int getAge() {return age}private void setName(String name) {this.name = name}private void setAge(int age) {this.age = age}@OverrideString toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}task classTest() {Student student = new Student()student.name = "heiko"student.age = 20println(student)student.setName("XXX")student.setAge(21)println(student)
}
8. 闭包
本质是一个开放的、匿名的代码块,它可以接受参数、也可以有返回值。
可以认为闭包是一个匿名的接口或类。
8.1 语法
闭包的参数可以是0个、1个或多个
{ [params ->] //具体代码
}
Groovy大括号
{}是闭包,小括号()是可以省略的,默认是带有小括号的,但是Groovy因为是糖果语法可以省略小括号
闭包{}只针对{}区域内有效。
8.2 一个最简单的闭包
def myClosure = {println("running start...")println("running end...")
}//调用闭包方式一
myClosure()
//调用闭包方式二
myClosure.call()
9. 示例 : 使用groovy语法读取一个文件 : .properties文件
def getUrlPath(String buildType) {def urlProperties properties = new Properties()def proFile = file("src/main/filters/" + buildType + "/config.properties")if (proFile.canRead()) {properties.load(new FileInputStream(proFile))if (properties != null) {url = properties["SERVER2"]}}url
}
9. Gradle相关的其他文章
Android Gradle开发与应用 (一) : Gradle基础
Android Gradle开发与应用 (二) : Groovy基础语法
Android Gradle插件开发_实现自动复制文件插件
相关文章:
Android Gradle开发与应用 (二) : Groovy基础语法
1. Groovy是什么 Groovy是基于JVM虚拟机的一种动态语言,语法和Java非常相似,并能够无缝地与Java代码集成和互操作,增加了很多动态类型和灵活的特性。(闭包、DSL) 语法和Java非常相似这个特点,意味着,如果我们完全不懂…...
iptables学习
iptables的4表5链的处理流程 一:业务地址请求服务时,首先经过iptables服务,iptables通过校验规则,通过校验是否同意业务访问,规则从上到下,匹配规则都失败了的话,走默认规则 (1&…...
kafka 集群搭建
kafka集群搭建 1. kafka介绍 Apache Kafka是一个开源的流处理平台,由Scala和Java编写1。它是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统2。Kafka的最大特…...
springboot-基础-eclipse配置+helloword示例
备份笔记。所有代码都是2019年测试通过的,如有问题请自行搜索解决! 下一篇:springboot-基础-添加model和controller的简单例子常用注解含义 目录 配置helloword示例新建项目创建文件 配置 spring boot官方有定制版eclipse,也就是…...
关于HTML标签应用教程
简介 HTML(HyperText Markup Language)是用于创建网页结构的标记语言。在本教程中,我们将介绍一些常用的HTML标签,以及它们的用法和示例。 1. HTML基础结构 <!DOCTYPE html> <html> <head><title>页面…...
3. 台阶问题
数楼梯 题目描述 楼梯有 N N N 阶,上楼可以一步上一阶,也可以一步上二阶。 编一个程序,计算共有多少种不同的走法。 输入格式 一个数字,楼梯数。 输出格式 输出走的方式总数。 样例 #1 样例输入 #1 4样例输出 #1 5提示…...
推荐一个 Obsidian 的 ChatGPT 插件
源码地址:https://github.com/nhaouari/obsidian-textgenerator-plugin Text Generator 是目前我使用过的最好的 Obsidian 中的 ChatGPT 功能插件。它旨在智能生成内容,以便轻松记笔记。它不仅可以在 Obsidian 中直接使用 ChatGPT,还提供了优…...
aws的RDS数据库开启慢查询日志
#开启慢日志两个参数 slow_query_log 1 设置为1,来启用慢查询日志 long_query_time 5 (单位秒) sql执行多长时间被定义为慢日志1. 点击RDS然后点击参数组,选择slow_query_log,设置为1【表示开启慢日志】点击保存…...
一文读懂 Python 值传递和引用传递
文章目录 版本前言形参和实参值传递和引用传递Python 变量存储值语义和引用语义值语义引用语义 探讨 Python 值传递和引用传递不可变(immutable)类型可变(mutable)类型案例一案例二 拓展:不可变类型真的不可变…...
Linux进阶——系统安全,重要文件,加固系统的相关配置
目录 引出Linux系统安全一、重要文件二、帐户口令三、权限管理四、日志配置五、服务安全六、其他配置 缓存三兄弟:缓存击穿、穿透、雪崩缓存击穿缓存穿透缓存雪崩 总结 引出 Linux进阶——系统安全,重要文件,加固系统的相关配置 Linux系统安…...
C++三级专项 字符串逆序
输入一串‘!’结束的字符,按逆序输出。 输入 如题述。 输出 如题述。 输入样例 abc! 输出样例 cba解析:strlen(s)用来计算指定的字符串s的长度,不包括结束字符“\0”。 不准直接抄!!! …...
【iOS ARKit】ARWorldMap
ARWorldMap 用于存储 ARSession 检测扫描到的空间信息数据,包括地标(Landmark)、特征点(Feature Point)、平面(Plane)等,以及使用者的操作信息,如使用者添加的 ARAnchor …...
敏捷开发最佳实践:质量维度实践案例之软硬一体持续交付
在过去的Top敏捷实践案例中,我们可以看到企业或团队在敏捷质量管理上的创新,包括场景化测试、迭代T1自动化覆盖、一套自动用例到处运行、用例持续运行可视化等,而这也进一步促进了价值流动。本文将继续给大家带来全新的质量维度实践案例&…...
PMP证书的含金量如何?
PMP含金量更多的是“敲门砖”作用,公司招聘的门槛,现在坐项目的大部分都需要PMP/NPDP证书。 当然现在PMP管理模式也很热门,对企业发展很有利,各大企业都有引进改良应用在公司的项目上,之前在校友群里面大家在讨论PMP …...
Linux 下安装Jupyter
pip3 install jupyter pip3 install ipython -------------------------------------------- pip3 install jupyterlab jupyter lab pip3 list | grep jupyterlab 启动: python3 -m jupyter lab 2.安装朱皮特 pip3 install -i https://pypi.douban.com/simpl…...
docker 基础(二)
常见命令 Docker最常见的命令就是操作镜像、容器的命令,详见官方文档:https://docs.docker.com/ 数据卷 命令说明文档地址docker volume create创建数据卷docker volume createdocker volume ls创建数据卷docker volume lsdocker volume rm查看所有数…...
LeetCode 刷题 [C++] 第236题.二叉树的最近公共祖先
题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以…...
vue3+vite 项目的创建
这里要提醒一下,如果我们要使用 vue3 的组合式api 的写法的话, 那么我们使用的 vue 版本不能低于 vue3.2 版本,不能低于 vue3.2 版本,不能低于 vue3.2 版本 vue2 已停止维护了, 现在全面拥抱vue3 之前用 vue-cli 创建…...
Windows Server 2022 使用ApacheDS用户认证
Windows Server 2022 使用ApacheDS用户认证 参考文档:https://docs.foxpass.com/docs/windows-ldap-auth-with-pgina 安装pGina软件,打开pGina软件 勾选启用LDAP认证,点击Configure 修改LDAP认证信息 点击Gateway,设置只要登…...
【Oracle】Oracle清理日志空间
(一)通过adrci清理日志空间 1.通过find命令查询大数据文件 find / -type f -size 100M 2.登录oracle数据库服务器用户 su - oracle 3.执行故障诊断命令 adrci 4.查询ADR目录 show home 5.切换到对应目录 set homepath diag/rdbms/orcl 6.执行日志清理命令…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
