zoukankan      html  css  js  c++  java
  • 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}"
     
  • 相关阅读:
    vue中form表单监听回车事件
    vue子组件传值父组件,父组件传值子组件
    决策树(统计学习方法(李航))的贷款的例子的实现
    pycharm2019破解
    当vps服务器被墙,如果用xshell连接
    富强民主文明和谐 点击事件变颜色
    java实现字符串翻转
    宝塔面板管理阿里云服务器FTP不能用
    linux学习历程
    计算页码,统计0到9数字出现的次数
  • 原文地址:https://www.cnblogs.com/rollenholt/p/3349051.html
Copyright © 2011-2022 走看看