Gradle学习-2 Groovy

1、Groovy基础语法

1.1、基本数据类型

  • Groovy支持数据类型:byte, short, int, long, float, double, char
(1)创建一个Android Studio项目
(2)在根目录新建一个 leon.gradle,输入以下内容

leon.gradle

/** 类型定义 **/
//byte 类型
byte b1 = 0
byte b2 = 1//整型
int a = 10
def b = 20//字符串
String str1 = "Hello"
def str2 = str1 + " World"//列表
def array = [1,2,3,4]
array.add(5)//映射表
def map = ["name":"冯宝宝", "sex":"woman"]/** 输出 **/
//byte 类型
println("b1 = $b1")
println("b2 = $b2")
//整型
println("a = $a")
println("b = $b")
//字符串
println("str2 = ${str2.toUpperCase()}")
//列表
println("array is $array")
array.each {println("item is $it")
}
//映射表
println("map is $map")
println("name is ${map["name"]}")
(3)在 setting.gradle中引入test.gradle

在这里插入图片描述

(4)打开命令行

检查gradle版本

gradle -v

检查java版本

java -version

保证,gradle与java的版本匹配

执行build.gradle

./gradlew clean -q

输出结果
在这里插入图片描述

1.2、方法

方法定义

//不带返回值方法
def score = ["琦玉":61,"杰诺斯":99, "King":100, "索尼克":59]
def evaluate(Map<String, Integer> map){for (String name: map.keySet()){if (map[name] >= 60){println("$name: 及格")}else{println("$name: 不及格")}}
}
evaluate(score)//带返回值方法
def add(int a, int b){return a+b;
}
def result = add(10, 23)
println("10 + 23 = $result")

执行结果
在这里插入图片描述

2、Groovy进阶语法

2.1、 DSL(Domain Specific Language)领域专用语言,只能用于构建配置,不能用于其他工作

在这里插入图片描述

2.2、闭包

  • 开放匿名代码块,可接收参数,有返回值,也可被分配给变量
  • 规则:{ [params ->] statements }
 //闭包{println("这是闭包A")}//闭包赋值给变量
def c = {println("这是闭包B")
}
c()//闭包接收参数(1个参数,it可省略)def c2 = { it->println("闭包接收参数 it: $it")}c2("2024-06-25")//闭包接收参数(3个参数)def c3 = { name, age, sex->println("姓名:$name")println("年龄:$age")println("性别:$sex")}c3("地狱吹雪", 18, "女")

输出结果
在这里插入图片描述

2.3、类

//自定义DSL :identity
def identity = {id "120223827318"baseInfo {name "战栗的龙卷"age 26sex "女"}
}//BaseInfo 类
class BaseInfo {private String nameprivate int ageprivate String sexdef name(String name) {this.name = name}def age(int age) {this.age = age}def sex(sex) {this.sex = sex}@OverrideString toString() {return "BaseInfo {  name: $name,  age: $age,  sex: $sex  }"}
}// Identity 类
class Identity {private String idprivate BaseInfo baseInfo//默认构造方法Identity() {baseInfo = new BaseInfo()}def id(id) {this.id = id}//入参是一个闭包def baseInfo(Closure closure) {//将闭包与类关联起来closure.setDelegate(baseInfo)closure.call()}@OverrideString toString() {return "Identity{  id: $id,   baseInfo: ${baseInfo.toString()}  }"}
}//DSL与类关联
Identity i = new Identity()
identity.delegate = i
identity.call()println("identity = ${i.toString()}")
println("姓名:${i.baseInfo.name}")

输出结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/34001.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ansible自动化运维,(1)模块

ansible是基于Python语言实现的&#xff0c;模块化&#xff1a;调用特定的模块完成特定的任务&#xff0c;支持自定义模块&#xff0c;可使用任何编程语言写模块(账号&#xff0c;软件等)。部署简单&#xff0c;基于python和SSH&#xff0c;相对安全&#xff0c;基于OpenSSH。 …

高考填报志愿,为何要优先考虑个人兴趣 ?

随着高考成绩纷纷出炉&#xff0c;考生又要面对人生另外一个重要的选择&#xff0c;那便是填报志愿&#xff0c;这关系到自己能否进入满意的学校和专业。如果考生对上述两个方面都不满意&#xff0c;那高考目的就没有达到。既然填报志愿如此重要&#xff0c;考生和家长在选择的…

软件构造 | Design Patterns for Reuse and Maintainability

Design Patterns for Reuse and Maintainability &#xff08;面向可复用性和可维护性的设计模式&#xff09; Open-Closed Principle (OCP) ——对扩展的开放&#xff0c;对修改已有代码的封 Why reusable design patterns A design… …enables flexibility to change …

面向对象设计原则(SOLID原则)C++

面向对象设计原则&#xff08;SOLID原则&#xff09;&#xff0c;每个原则都有其独特的重要性和应用场景。以下是详细解释&#xff0c;并给出简单的示例&#xff1a; 1. 单一职责原则&#xff08;Single Responsibility Principle, SRP&#xff09;&#xff1a; 原则概述&…

Android应用开发从入门到竞赛(1)——开篇

本人从事Android应用开发十余年&#xff0c;指导大学生竞赛十余载&#xff0c;多次指导竞赛任务的Android应用开发&#xff0c;开设本专栏&#xff0c;介绍如何快速入门Android应用开发并将其应用于各类竞赛&#xff0c;同时顺带聊聊比赛感想。&#xff08;部分内容来自本人所编…

树莓派4设置

使用sudo命令时要求输入密码 以 sudo 为前缀的命令以超级用户身份运行。默认情况下&#xff0c;超级用户不需要密码。不过&#xff0c;您可以要求所有以 sudo 运行的命令都输入密码&#xff0c;从而提高 Raspberry Pi 的安全性。 要强制 sudo 要求输入密码&#xff0c;请为你…

Nuxt3 [Vue warn]: Hydration node mismatch:【解决方案】

[Vue warn]: Hydration node mismatch: 水合节点不匹配 Server rendered element contains more child nodes than client vdom. 服务器呈现的元素包含的子节点多于客户端vdom。 这个问题解决起来也很好解决&#xff0c;看这个问题是怎么出来的&#xff0c;看代码&#xff1a;…

DiskLRUCache

DiskLRUCache是Android中实现磁盘缓存相关的组件类&#xff0c;当缓存满时其使用最近最少使用策略来淘汰相关的元素&#xff0c;以控制缓存大小。本文主要基于DiskLRUCache相关源码分析DiskLRUCache的创建、缓存的添加、获取、删除流程。 DiskLRUCache创建 DiskLRUCache不允许…

暗影精灵8Pro声音没有了,这个方法可以解决,亲测有效!

这个OMEN by HP Gaming Laptop 16-k0xxx Windows 10 Sound Driver Mod &#xff0c;真的解决了我的大问题&#xff01; 如果你的暗影精灵8 Pro酷睿版突然变得哑巴了&#xff0c;扬声器和麦克风都发不出声音&#xff0c;那可能是声卡驱动出了问题。 别担心&#xff0c;我也是个…

代码随想录算法训练营DAY46|121. 买卖股票的最佳时机、122.买卖股票的最佳时机II、123.买卖股票的最佳时机III

121. 买卖股票的最佳时机 题目链接&#xff1a;121. 买卖股票的最佳时机 class Solution(object):def maxProfit(self, prices):""":type prices: List[int]:rtype: int"""if len(prices) 0:return 0dp [[0]*2 for i in range(len(prices))]…

eNSP中三层交换机的配置和使用

一、拓扑图 1.新建拓扑图 2.PC端配置 PC1: PC2&#xff1a; 二、基本命令配置 1.S1配置 <Huawei>system-view [Huawei]sysname S1 [S1]vlan 10 //在交换机 S1 上创建 VLAN 10 [S1-vlan10]vlan 20 // 在交换机 S1 上创建 VLAN 20 [S1-vlan20]quit //退出 VLAN 配置…

舆论中心的《黑神话:悟空》:人们总希望,这只猴子能打破些什么

距离《黑神话&#xff1a;悟空》上线还有60天。外界关于游戏的争议有很多&#xff0c;但游戏科学却很少出来回应什么。 6月9日&#xff0c;博主兲虎发文称&#xff0c;《黑神话&#xff1a;悟空》之所以在发布宣传视频后&#xff0c;一直遭受到所谓性别歧视的攻击与污蔑&#…

短视频营销系统小程序源码

开启全新营销时代 &#x1f3a5;一、引言&#xff1a;短视频营销微信小程序&#xff0c;营销新风尚 在数字化时代&#xff0c;短视频以其直观、生动的特点迅速崛起&#xff0c;成为用户获取信息、娱乐消遣的重要渠道。而短视频营销微信小程序则是将短视频与微信营销完美结合&…

力扣(2024.06.25)

1. 76——最小覆盖子串 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 "" 。 注意&#xff1a; 对于 t 中重复字符&#xff0c;我们寻找的子字符串中该字符数量必须不…

【Unity】数据持久化--二进制 ,文件操作

1、各字节类型转字节数组 1.1 不同变量类型 有符号 sbyte int short long无符号 byte uint ushort ulong浮点 float double decimal特殊 bool char string 1.2 变量的本质 变量的本质是2进制在内存中都以字节的形式存储着1byte 8bit1bit(位)不是0就是1 //通过sizeof方法可…

解决node: bad option: -V

出现这个问题是由于我们的不当操作造成的&#xff0c;v是需要小写的&#xff0c;看下图 node --version node -v

P2P文件传输协议之BitTorrent协议

P2P文件传输协议中的BitTorrent协议是一种用于高效地下载和上传大型文件的点对点&#xff08;P2P&#xff09;传输协议。以下是关于BitTorrent协议的详细说明&#xff1a; 一、技术原理 分布式系统&#xff1a;BitTorrent是一个分布式系统&#xff0c;没有中央服务器。相反&a…

缓存双写一致性(笔记)

缓存更新方案 旁路缓存模式 这是比较多的 旁路缓存模式&#xff1a;缓存有就返回&#xff0c;没有数据库查询&#xff0c;放入缓存返回。 还有些常用缓存策略 读穿透模式 读穿透和旁路很相似&#xff0c;程序不需要关注从哪里读取数据&#xff0c;它只需要从缓存查询数据。…

MySQL中什么是索引合并?

索引合并是数据库查询优化的一种技术&#xff0c;它允许数据库管理系统在处理查询时&#xff0c;利用多个索引来改进数据检索的效率。这种技术主要应用在那些设计多个条件的查询中&#xff0c;通过合并多个索引的结果集&#xff0c;找出最终满足所有条件的数据行。 在MySQL中如…

ts 中定义多个数据

let a :{name:string,[xx:string]:any} a {name:小明,age:28,gender:男} 正确 a {name:111,age:28,gender:男} 错误&#xff0c;name必须是字符串 //这句话的意思就是a对象中 name是必填的并且只能是字符串&#xff0c;后面属性名是字符串&#xf…