groovy-脚本和类

在groovy中定义类和java中是一样的。类的方法可以是static,也可以是非static的。

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

在groovy中导入包或者导入类,语法和java是一样的。只不过在groovy中默认已经导入了下面的package:

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

在groovy和java中不同的一点就是,groovy默认是public的。

每一个groovy类,在JVM层级,都是字节码形式的java code,所以在java代码中可以调用groovy中申明的方法,反之亦然。

你可以指定方法的参数和返回值,以便他们能够更好的和java代码相互调用。当然你也可以实现接口或者重载方法。但是需要你没有指定方法后者属性的类型的话,那么在JVM层级的字节码中,他们将会是 java.lang.Object 类型。

比如:

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

下面给出了一个最简单的groovy脚本:

1println "Nice cheese Gromit!"

如果你是要groovyc来编译上面的代码的话,假设你这个脚本的名字为Foo.script,那么你就会获得 Foo.class文件。

你可以在命令行运行下面的代码,假设你的classpath中包含:groovy.jar and asm.jar.

1java Foo

这将执行自动生成的实例化Foo class的 main(String[] args)方法,然后调用run()方法。当然你可以可以直接在java中使用这个类,

1import groovy.lang.Binding;
2import groovy.lang.Script;
3 
4public 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 
11Script foo = new Foo(binding);
12 foo.run();
13 }
14}

其实在上面这里没必要使用Binding,因为Foo 有一个无参的构造函数,尽管使用Binding 我们能够更加容易的传递参数。

相比起类来说,在groovy脚本中,变量不需要申明(def),在脚本中变量的引用将自动创建并放入Binding中。

在groovy脚本中,为了编写一个方法,没必要像java一样必须先定义一个类,

但是和传统的基于class的groovy而言,在类外定义函数需要使用def关键字。但是如果你需要一些比如static或者实例变量等等的东西的时候,最好写一个类。
下面给出了一个例子:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值