当前位置: 首页 > 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插件开发_实现自动复制文件插件

http://www.lryc.cn/news/308689.html

相关文章:

  • iptables学习
  • kafka 集群搭建
  • springboot-基础-eclipse配置+helloword示例
  • 关于HTML标签应用教程
  • 3. 台阶问题
  • 推荐一个 Obsidian 的 ChatGPT 插件
  • aws的RDS数据库开启慢查询日志
  • 一文读懂 Python 值传递和引用传递
  • Linux进阶——系统安全,重要文件,加固系统的相关配置
  • C++三级专项 字符串逆序
  • 【iOS ARKit】ARWorldMap
  • 敏捷开发最佳实践:质量维度实践案例之软硬一体持续交付
  • PMP证书的含金量如何?
  • Linux 下安装Jupyter
  • docker 基础(二)
  • LeetCode 刷题 [C++] 第236题.二叉树的最近公共祖先
  • vue3+vite 项目的创建
  • Windows Server 2022 使用ApacheDS用户认证
  • 【Oracle】Oracle清理日志空间
  • 数据抽取平台pydatax介绍--实现和项目使用
  • 容易发生内存泄漏的八个场景,你都知道吗?
  • 掌握 Vue3 中的 setup 函数
  • BUUCTF AWD-Test1
  • 百亿诈骗案频出,欧科云链用“技术责任”拓宽Web3安全边界
  • 一个实时波形图的封装demo(QT)(qcustomplot)
  • Java进阶-反射
  • 力扣180 连续出现的数字
  • C++面试 -操作系统-架构能力:内存问题分析与性能优化
  • 基于springboot+vue的共享汽车管理系统(前后端分离)
  • All Roads Lead to Rome (30)