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

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&#xff08;HyperText Markup Language&#xff09;是用于创建网页结构的标记语言。在本教程中&#xff0c;我们将介绍一些常用的HTML标签&#xff0c;以及它们的用法和示例。 1. HTML基础结构 <!DOCTYPE html> <html> <head><title>页面…...

3. 台阶问题

数楼梯 题目描述 楼梯有 N N N 阶&#xff0c;上楼可以一步上一阶&#xff0c;也可以一步上二阶。 编一个程序&#xff0c;计算共有多少种不同的走法。 输入格式 一个数字&#xff0c;楼梯数。 输出格式 输出走的方式总数。 样例 #1 样例输入 #1 4样例输出 #1 5提示…...

推荐一个 Obsidian 的 ChatGPT 插件

源码地址&#xff1a;https://github.com/nhaouari/obsidian-textgenerator-plugin Text Generator 是目前我使用过的最好的 Obsidian 中的 ChatGPT 功能插件。它旨在智能生成内容&#xff0c;以便轻松记笔记。它不仅可以在 Obsidian 中直接使用 ChatGPT&#xff0c;还提供了优…...

aws的RDS数据库开启慢查询日志

#开启慢日志两个参数 slow_query_log 1 设置为1&#xff0c;来启用慢查询日志 long_query_time 5 &#xff08;单位秒&#xff09; sql执行多长时间被定义为慢日志1. 点击RDS然后点击参数组&#xff0c;选择slow_query_log&#xff0c;设置为1【表示开启慢日志】点击保存…...

一文读懂 Python 值传递和引用传递

文章目录 版本前言形参和实参值传递和引用传递Python 变量存储值语义和引用语义值语义引用语义 探讨 Python 值传递和引用传递不可变&#xff08;immutable&#xff09;类型可变&#xff08;mutable&#xff09;类型案例一案例二 拓展&#xff1a;不可变类型真的不可变&#xf…...

Linux进阶——系统安全,重要文件,加固系统的相关配置

目录 引出Linux系统安全一、重要文件二、帐户口令三、权限管理四、日志配置五、服务安全六、其他配置 缓存三兄弟&#xff1a;缓存击穿、穿透、雪崩缓存击穿缓存穿透缓存雪崩 总结 引出 Linux进阶——系统安全&#xff0c;重要文件&#xff0c;加固系统的相关配置 Linux系统安…...

C++三级专项 字符串逆序

输入一串‘&#xff01;’结束的字符&#xff0c;按逆序输出。 输入 如题述。 输出 如题述。 输入样例 abc! 输出样例 cba解析&#xff1a;strlen(s)用来计算指定的字符串s的长度&#xff0c;不包括结束字符“\0”。 不准直接抄&#xff01;&#xff01;&#xff01; …...

【iOS ARKit】ARWorldMap

ARWorldMap 用于存储 ARSession 检测扫描到的空间信息数据&#xff0c;包括地标&#xff08;Landmark&#xff09;、特征点&#xff08;Feature Point&#xff09;、平面&#xff08;Plane&#xff09;等&#xff0c;以及使用者的操作信息&#xff0c;如使用者添加的 ARAnchor …...

敏捷开发最佳实践:质量维度实践案例之软硬一体持续交付

在过去的Top敏捷实践案例中&#xff0c;我们可以看到企业或团队在敏捷质量管理上的创新&#xff0c;包括场景化测试、迭代T1自动化覆盖、一套自动用例到处运行、用例持续运行可视化等&#xff0c;而这也进一步促进了价值流动。本文将继续给大家带来全新的质量维度实践案例&…...

PMP证书的含金量如何?

PMP含金量更多的是“敲门砖”作用&#xff0c;公司招聘的门槛&#xff0c;现在坐项目的大部分都需要PMP/NPDP证书。 当然现在PMP管理模式也很热门&#xff0c;对企业发展很有利&#xff0c;各大企业都有引进改良应用在公司的项目上&#xff0c;之前在校友群里面大家在讨论PMP …...

Linux 下安装Jupyter

pip3 install jupyter pip3 install ipython -------------------------------------------- pip3 install jupyterlab jupyter lab pip3 list | grep jupyterlab 启动&#xff1a; python3 -m jupyter lab 2.安装朱皮特 pip3 install -i https://pypi.douban.com/simpl…...

docker 基础(二)

常见命令 Docker最常见的命令就是操作镜像、容器的命令&#xff0c;详见官方文档&#xff1a;https://docs.docker.com/ 数据卷 命令说明文档地址docker volume create创建数据卷docker volume createdocker volume ls创建数据卷docker volume lsdocker volume rm查看所有数…...

LeetCode 刷题 [C++] 第236题.二叉树的最近公共祖先

题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以…...

vue3+vite 项目的创建

这里要提醒一下&#xff0c;如果我们要使用 vue3 的组合式api 的写法的话&#xff0c; 那么我们使用的 vue 版本不能低于 vue3.2 版本&#xff0c;不能低于 vue3.2 版本&#xff0c;不能低于 vue3.2 版本 vue2 已停止维护了&#xff0c; 现在全面拥抱vue3 之前用 vue-cli 创建…...

Windows Server 2022 使用ApacheDS用户认证

Windows Server 2022 使用ApacheDS用户认证 参考文档&#xff1a;https://docs.foxpass.com/docs/windows-ldap-auth-with-pgina 安装pGina软件&#xff0c;打开pGina软件 勾选启用LDAP认证&#xff0c;点击Configure 修改LDAP认证信息 点击Gateway&#xff0c;设置只要登…...

【Oracle】Oracle清理日志空间

&#xff08;一&#xff09;通过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.执行日志清理命令…...

AutoDL新手避坑指南:用消费级显卡24G显存搞定3D高斯泼溅(附Xftp传文件技巧)

AutoDL新手避坑指南&#xff1a;24G显存消费级显卡玩转3D高斯泼溅 第一次在AutoDL平台部署3D高斯泼溅项目时&#xff0c;我像大多数新手一样&#xff0c;下意识选择了V100这样的专业算力卡。结果训练刚开始就遭遇显存爆炸&#xff0c;白白浪费了租用费用。后来改用RTX 3090这样…...

基于Python的影城会员管理系统

博主介绍&#xff1a;✌ 专注于Java,python,✌关注✌私信我✌具体的问题&#xff0c;我会尽力帮助你。一、研究目的本研究旨在设计并实现一套基于Python的影城会员管理系统&#xff0c;以满足现代影城在会员管理方面的需求。具体研究目的如下&#xff1a; 首先&#xff0c;通过…...

3个实用技巧快速解决城通网盘下载限速问题

3个实用技巧快速解决城通网盘下载限速问题 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 你是否曾经为了下载城通网盘上的文件而苦苦等待&#xff1f;面对几十KB/s的下载速度&#xff0c;看着进度条缓…...

从阻容复位到专用芯片:以MAX706为例,解析MCU看门狗复位电路的设计升级

1. 为什么MCU需要可靠的复位电路 我第一次用阻容复位电路是在大学电子设计竞赛上。当时用了一个10k电阻加0.1uF电容的经典组合给STM32做复位&#xff0c;结果在作品演示时&#xff0c;评委按下复位键后系统直接死机了。后来才知道&#xff0c;这种简单的阻容复位在电源波动时特…...

基于LDAP与AES加密的企业级登录认证方案实践

1. 企业级登录认证的挑战与解决方案 在企业级应用开发中&#xff0c;登录认证系统往往面临多重挑战。特别是当系统需要同时支持内部员工和外协人员访问时&#xff0c;如何确保安全性、统一性和易用性就成为了关键问题。我最近参与的一个金融项目就遇到了这样的场景&#xff1a;…...

保姆级教程:手把手教你用Node.js + WebSocket搭建自己的WebRTC信令服务器

从零构建WebRTC信令服务器&#xff1a;Node.js实战指南 WebRTC技术已经彻底改变了实时通信的格局&#xff0c;让浏览器之间的点对点音视频传输成为可能。但很多开发者在掌握了getUserMedia和RTCPeerConnection的基本用法后&#xff0c;往往会卡在一个关键环节——如何让两个浏览…...

拥抱AI变革:AdMergeX产研团队开展AI Coding专题研讨

近日&#xff0c;AdMergeX 产研团队成功举办 “AI 驱动下的研发范式转型” 专题研讨会。活动特邀 AI 编程领域顶尖专家 ——Verdent AI COO 刘晓春及其团队莅临&#xff0c;与公司技术骨干展开深度闭门交流。双方围绕智能编码、工程自动化、人机协同等核心议题进行了前沿探讨&a…...

CefFlashBrowser:在2026年重温Flash经典的终极解决方案

CefFlashBrowser&#xff1a;在2026年重温Flash经典的终极解决方案 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser CefFlashBrowser 是一款专为Flash内容设计的开源浏览器工具&#xff0c…...

多模态缓存不是“加大内存”就能解决!20年分布式系统老兵拆解:跨模态语义哈希、时序感知驱逐、异构设备亲和性三大硬核突破

第一章&#xff1a;多模态大模型缓存策略优化 2026奇点智能技术大会(https://ml-summit.org) 多模态大模型在处理图像、文本、音频等异构输入时&#xff0c;面临显著的缓存效率瓶颈&#xff1a;不同模态特征向量维度差异大、访问局部性弱、序列长度动态可变&#xff0c;导致传…...

华为EulerOS 2.0 SP8 ARM版yum源配置避坑指南:从DNS问题到完整流程

华为EulerOS 2.0 SP8 ARM版yum源配置全流程与深度排错指南 1. 环境准备与系统确认 在ARM架构服务器上配置华为EulerOS的yum源前&#xff0c;必须确保系统环境符合要求。不同于x86架构&#xff0c;ARM平台的特殊性往往会导致一些意料之外的问题。 验证系统架构与版本&#xf…...