groovy-腳本和類


在groovy中定義類和java中是一樣的。類的方法可以是static,也可以是非static的。

groovy中的方法可以是public, protected, private,同時也支持java中的修飾符,比如synchronized。

在groovy中導入包或者導入類,語法和java是一樣的。只不過在groovy中默認已經導入了下面的package:

1 java.lang
2 java.io
3 java.math
4 java.net
5 java.util
6 groovy.lang
7 groovy.util

在groovy和java中不同的一點就是,groovy默認是public的。

每一個groovy類,在JVM層級,都是字節碼形式的java code,所以在java代碼中可以調用groovy中申明的方法,反之亦然。

你可以指定方法的參數和返回值,以便他們能夠更好的和java代碼相互調用。當然你也可以實現接口或者重載方法。但是需要你沒有指定方法后者屬性的類型的話,那么在JVM層級的字節碼中,他們將會是 java.lang.Object 類型。

比如:

1 //Callee.groovy
2 class Callee {
3  void hello() {
4  println "hello, world"
5  }
6 }
1 //Caller.groovy
2 c = new Callee()
3 c.hello()

下面給出了一個最簡單的groovy腳本:

1 println "Nice cheese Gromit!"

如果你是要groovyc來編譯上面的代碼的話,假設你這個腳本的名字為Foo.script,那么你就會獲得 Foo.class文件。

你可以在命令行運行下面的代碼,假設你的classpath中包含:groovy.jar and asm.jar.

1 java Foo

這將執行自動生成的實例化Foo class的 main(String[] args)方法,然后調用run()方法。當然你可以可以直接在java中使用這個類,

1 import groovy.lang.Binding;
2 import groovy.lang.Script;
3  
4 public class UseFoo {
5  public static void main(String[] args) {
6  // lets pass in some variables
7  Binding binding = new Binding();
8  binding.setVariable("cheese""Cheddar")
9  binding.setVariable("args", args)
10  
11 Script foo = new Foo(binding);
12  foo.run();
13  }
14 }

其實在上面這里沒必要使用Binding,因為Foo 有一個無參的構造函數,盡管使用Binding 我們能夠更加容易的傳遞參數。

相比起類來說,在groovy腳本中,變量不需要申明(def),在腳本中變量的引用將自動創建並放入Binding中。

在groovy腳本中,為了編寫一個方法,沒必要像java一樣必須先定義一個類,

但是和傳統的基於class的groovy而言,在類外定義函數需要使用def關鍵字。但是如果你需要一些比如static或者實例變量等等的東西的時候,最好寫一個類。
下面給出了一個例子:

1 def foo(list, value) {
2  println "Calling function foo() with param ${value}"
3  list << value
4 }
5  
6 x = []
7 foo(x, 1)
8 foo(x, 2)
9 assert x == [12]
10  
11 println "Creating list ${x}"
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM