专业的JAVA编程教程与资源

网站首页 > java教程 正文

Android关于Groovy语言,你知道哪些?

temp10 2025-05-08 21:15:24 java教程 2 ℃ 0 评论

读完本文需要5分钟

Android关于Groovy语言,你知道哪些?

用 Groovy 编写的任何内容都可以编译成标准的 Java 类文件并在 Java 代码中重用。类似地,用标准 Java 代码编写的内容也可以在 Groovy 中重用。Groovy是没有类型的Java,实际在编译成class文件的时候,会转化成真实的类型。

task hello {

println 'hello world'

}

基本语法

● Groovy 注释标记和Java 一样,支持//或者/**/

● Groovy 语句可以不用分号结尾。Groovy 为了尽量减少代码的输入

● Groovy 中支持动态类型,即定义变量的时候可以不指定其类型。Groovy 中,

变量定义可以使用关键字def

def variable1 = 1 //可以不使用分号结尾

def varable2 = "I am a person"

def int x = 1 //变量定义时,也可以直接指定类型

函数也不需要指定类型

def sum(a,b){

return a+b

}

函数可以有默认值。

def repeat(val,repeat=3){

for(i in 0..<repeat){

println "This is ${i}:${val}"

}

}

字符串:

1 单引号''中的内容严格对应Java 中的String,不对$符号进行转义

def singleQuote='I am $ dolloar' //输出就是I am $ dolloar

2 双引号""的内容则和脚本语言的处理有点像,如果字符中有$号的话,则它会$表达式先求值。

def doubleQuoteWithoutDollar = "I am one dollar" //输出 I am one dollar

def x = 1

def doubleQuoteWithDollar = "I am $x dolloar" //输出I am 1 dolloar

3 三个引号'''xxx'''中的字符串支持随意换行 比如

def multieLines = ''' begin

line 1

line 2

end '''

循环

for(i in 0..5){

println("xxx")

}

基本数据类型

作为动态语言,Groovy 世界中的所有事物都是对象。所以,int,boolean 这些Java 中

的基本数据类型,在Groovy 代码中其实对应的是它们的包装数据类型。比如int 对应为

Integer,boolean 对应为Boolean

容器类

Groovy 中的容器类很简单,就三种:

● List:链表,其底层对应Java 中的List 接口,一般用ArrayList 作为真正的实

现类。

● Map:键-值表,其底层对应Java 中的LinkedHashMap。

● Range:范围,它其实是List 的一种拓展。

对容器而言,我们最重要的是了解它们的用法。下面是一些简单的例子:

List 类

除了声明时往集合中添加元素外,还可以用以下方式向集合中添加元素:

def collect=["a","b","c"]

collect.add(1);

collect<<"come on";

collect[collect.size()]=100.0

Collection使用类似数组下标的方式进行检索:

println collect[collect.size()-1]

println collect[5]

groovy支持负索引:

println collect[-1] //索引其倒数第1个元素

println collect[-2] //索引其倒数第2个元素

Collection支持集合运算:

for (int i=0;i<collect.size();i++){

println(collect[i])

}

collect=collect+5 //在集合中添加元素5

println collect[collect.size()-1]

collect=collect-'a' //在集合中减去元素a(第1个)

println collect[0] //现在第1个元素变成b

同样地,你可以往集合中添加另一个集合或删除一个集合:

collect=collect-collect[0..4] //把集合中的前5个元素去掉

println collect[0] //现在集合中仅有一个元素,即原来的最后一个元素

println collect[-1] //也可以用负索引,证明最后一个元素就是第一个元素

Map 类

def map=['name':'john','age':14,'sex':'boy']

添加项:

map=map+['weight':25] //添加john的体重

map.put('length',1.27) //添加john的身高

map.father='Keller' //添加john的父亲

可以用两种方式检索值:

println map['father'] //通过key作为下标索引

println map.length //通过key作为成员名索引

遍历一个map。

map.each {

println(it.getKey())

println(it.getValue())

}

Range 类

定义一个类

class Person {

def name

def age

String toString(){//注意方法的类型String,因为我们要覆盖的方法为String类型

"$name,$age"

}

如果你使用javabean风格来做同样的事,起码代码量要增加1倍以上。

我们可以使用默认构造方法实例化Person类:

def person1=new Person()

person1.name='kk'

person1.age=20

println person1

也可以用groovy的风格做同样的事:

def person2=new Person(['name':'gg','age':22]) //[]号可以省略

println person2

## 闭包

def c={

println("xxx")

}

c.call();

文件操作

### Java传统操作:

FileReader fr=new FileReader("E:/phsftp/evdokey/evdokey_201103221556.txt");

BufferedReader br=new BufferedReader(fr);

String line="";

String[] arrs=null;

while ((line=br.readLine())!=null) {

arrs=line.split(",");

System.out.println(arrs[0] + " : " + arrs[1] + " : " + arrs[2]);

}

br.close();

fr.close();

groovy操作:

读文件

def targetFile = new File('C:\\Users\\cuizaixi\\Desktop\\testFile.txt')

targetFile.each {

String oneLine->

println(oneLine)

}

写文件

def srcFile = new File('C:\\Users\\cuizaixi\\Desktop\\testFile.txt')

def targetFile = new File('C:\\Users\\cuizaixi\\Desktop\\testTargetFile.txt')

targetFile.withOutputStream{ os->

srcFile.withInputStream{ ins->

os << ins //利用OutputStream 的<<操作符重载,完成从inputstream 到OutputStream

//的输出

}

}

Xml操作

//第一步,创建XmlSlurper 类

def xparser = new XmlSlurper()

def targetFile = new File("C:\\Users\\cuizaixi\\Desktop\\test.xml")

def gpathResult = xparser.parse(targetFile)

def book4 = gpathResult.value.books.book[3]

println(book4)

如果大家觉得好,大家转载的同时,也动动小手点点文章左上角的订阅,

关注“AndroidDeveloper”,或者加群“556062010”联系到我,

这样就能每天第一时间收到作者推送的文章啦,谢谢大家的关注。

作者:头条号 / AndroidDeveloper

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表