Apache Groovy是一種強大的、可選類型的動態語言,具備靜態類型和靜態編譯功能,因爲具備簡潔、熟悉和易於學習的語法,Java平臺旨在提升開發人員的工做效率。它能夠與任何Java程序順暢地集成,並當即嚮應用程序交付強大的特性,包括腳本功能、特定領域的語言創做、運行時和編譯時元編程以及函數式編程(官方文檔對groovy描述)。html
brew install groovy
複製代碼
You should set GROOVY_HOME:
export GROOVY_HOME=/usr/local/opt/groovy/libexec
複製代碼
groovy -v
## 打印輸出
Groovy Version: 3.0.4 JVM: 14.0.1 Vendor: Oracle Corporation OS: Mac OS X
複製代碼
def a = 1
def s = "test"
def int b = 1 //定義變量也能夠知道類型
複製代碼
def test(arg1,arg2){ //定義兩個參數 arg1 arg2
//邏輯代碼
....
// 函數最後一行爲返回值 函數返回值爲 int 類型
10
}
String test2(arg1,arg2){ //指定返回值類型 String 則沒必要寫關鍵字 def
//邏輯代碼
....
// 函數最後一行爲返回值 函數返回值爲 String 類型
//函數指定返回值 則返回值必須一致
// return 可寫可不寫
return "aaa"
}
複製代碼
//打印輸出 hello
println("hello")
//能夠寫成
println "hello"
複製代碼
println("hello groovy")
複製代碼
def a = 1
def b = "hello groovy"
def c = false
def d = 10000000000000
println a.getClass().getCanonicalName()
println b.getClass().getCanonicalName()
println c.getClass().getCanonicalName()
println d.getClass().getCanonicalName()
複製代碼
//隨意添加各類類型對象 變量打印
def aList = [5,'string',true]
//元素變量
aList.each {
//it是是與當前元素對應的隱式參數
println "Item: $it"
}
//添加元素
//查找元素 find 方法
//
println(aList.find{ it > 1 })
println(aList.findAll{ it > 1 })
//刪除元素
//執行結果
Item: 5
Item: string
Item: true
複製代碼
//其中的 key1 和 key2 默認被處理成字符串"key1"和"key2"
def aNewMap = [key1:"hello",key2:false]
//map 取值
println aNewMap.key1
println aNewMap['key2']
//爲 map 添加新元素
aNewMap.anotherkey = "i am map"
aNewMap.each{
println "Item: $it"
}
//執行結果
hello
false
Item: key1=hello
Item: key2=false
Item: anotherkey=i am map
複製代碼
//標識 list 至關於數學閉包 [1,5]
def mRange = 1..5
mRange.each {
println "Item: $it"
}
//標識 list 至關於數學閉包 [1,5)
def mRange1 = 1..<5
mRange1.each {
println "other Item: $it"
}
//獲取開頭結尾元素
println mRange.from
println mRange.to
複製代碼
//格式一 有參數
def xxx = {
params ->
//返回值
code邏輯
}
//格式二 無參數 不須要 ->
def xxx = {
code 邏輯
}
複製代碼
//閉包是一段代碼,因此須要用花括號括起來
def testClosure = {
//箭頭前面是參數定義,箭頭後面是代碼
String param1, int param2 ->
//邏輯代碼,閉包最後一句是返回值
println "hello groovy,$param1,$param2"
//也可使用 return,和 groovy 中普通函數同樣
}
//閉包調用
testClosure.call("參數1",20)
testClosure("參數2",40)
//輸出結果
hello groovy,參數1,20
hello groovy,參數2,40
複製代碼
似,it 表明閉包的參數,以下示例。java
def greeting = {
//隱含參數
"Hello, $it!"
}
println greeting('groovy') == 'Hello, groovy!'
//等同於:
def greeting1 = {
//也可寫出隱含參數
it -> "Hello, $it!"
}
println greeting1('groovy') == 'Hello, groovy!'
//輸出結果 不用說確定都爲 true
複製代碼
task hello{
doLast ({
//邏輯代碼
println'aaaaaa'
})
}
//省略括號變成經常使用寫法
task hello{
doLast {
//邏輯代碼
println'aaaaaa'
}
}
複製代碼
def testFile = new File("TestFile")
//讀文件每一行 eachLine
testFile.eachLine{
String oneLine ->
//打印每一行內容
println oneLine
}
//獲取文件 byte 數組
def bytes = testFile.getBytes()
//獲取文件輸入流
def is = testFile.newInputStream()
//和Java 同樣不用須要關閉
is.close
//閉包 Groovy 會自動替你 close
targetFile.withInputStream{ ips ->
//邏輯代碼
}
複製代碼
def copyFile = new File("CopyFile")
copyFile.withOutputStream{
os->
testFile.withInputStream{
ips ->
// << 是 groovy OutputStream 的操做符,它能夠完成 InputStream 到 OutputStream 輸出
os << ips
}
}
copyFile.eachLine{
String oneLine ->
println "copyFile oneLine:$oneLine"
}
複製代碼
//建立 XmlSlurper 類
def xmlspr = new XmlSlurper()
//獲取清單文件 file
def file = new File("AndroidManifest.xml")
//獲取解析對象
//獲取清單文件根元素,也就是 manifest 標籤
def manifest = xmlspr.parse(file)
// 聲明命名空間
//manifest.declareNamespace('android':'http://schemas.android.com/apk/res/android')
//獲取包名
println manifest.'@package'
//獲取 activity intent-filter
def activity = manifest.application.activity
//獲取 intent-filter 設置的過濾條件 也能夠此判斷是否爲應用程序入口 activity
activity.find{
it.'intent-filter'.find { filter ->
filter.action.find{
println it.'@android:name'.text()
}
filter.category.find{
println it.'@android:name'.text()
}
}
}
複製代碼
groovy File api 文檔地址android
groovy OutputStreamgithub
package groovyclass
class GroovyClass{
String p1;
int p2;
GroovyClass(p1,p2){
this.p1 = p1
this.p2 = p2
}
//和 Java 相似 若是不聲明 public/private
//等訪問權限的話,Groovy 中類及其變量默認都是 public
def printParams(){
println "參數:$p1,$p2"
}
}
複製代碼
import groovyclass.GroovyClass
def g = new GroovyClass("hello",100)
g.printParams()
複製代碼
println("hello groovy")
複製代碼
groovyc -d classes test.groovy
複製代碼