文件名:ScriptBase.groovy import groovy.transform.Field; @Field author = 'EvilsouM' @Field gender = 'male' @Field age = 25 //必须要先import def printInfo() { println "name->$author gender->$gender age->$age" } 1. 2. 3. 4. 5. 6. 7. 8. 在class中定义成员变量 文件名:ScriptBas...
importorg.codehaus.groovy.runtime.InvokerHelperclassMainextendsScript{defpower(int n){3**n}defrun(){println '欢迎访问 zinyan.com println"3^6==${power(6)}"}staticvoidmain(String[]args){InvokerHelper.runScript(Main,args)}} 只有在调用的方法才会放在run函数中。我们创建的def power()会自动转为函...
1.GroovyClassLoader:运行时加载groovy代码,生成.class对象 GroovyClassLoader groovyClassLoader = new GroovyClassLoader(); String scriptText = "class Hello { void hello() { println 'hello' } }"; //将Groovy脚本解析为Class对象 Class clazz = groovyClassLoader.parseClass(scriptText); //Class clazz ...
接着时候groovyc命令将main.groovy转换成字节码main.class,接着使用class文件的阅读工具查看其内容如下: // // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // importgroovy.lang.Binding; importgroovy.lang.Script; importorg.codehaus.groovy.runtime.Invo...
import org.codehaus.groovy.runtime.InvokerHelper class Main extends Script { def run() { println 'Groovy world!' } static void main(String[] args) { InvokerHelper.runScript(Main, args) } } 类继承自groovy.lang.Script groovy.lang.Script需要一个带返回值的方法run ...
也不一定非要使用class来定义,如下定义方式也是可以使用的(默认解析为Script类,会有run方法)GroovyClassLoaderclassLoader=newGroovyClassLoader();ClassaClass=classLoader.parseClass("def doIt(i) {return \"ok \" + i}");Objectobject=aClass.newInstance();Methodmethod=object.getClass().getDeclaredMethod("...
import org.codehaus.groovy.control.SourceUnit; import org.codehaus.groovy.control.CompilationUnit.SourceUnitOperation; public class CustomGroovyClassLoader extends GroovyClassLoader { private final String[] DEFAULT_IMPORT_CLASSES = { "rednaxelafx.sample.Foo", ...
1packagegroovy;23importgroovy.lang.Binding;4importgroovy.lang.GroovyShell;5importgroovy.lang.Script;67publicclassTestScript {8publicstaticvoidmain(String[] args) {910GroovyShell groovyShell =newGroovyShell();11/**12* 脚本为13def customConcat(def str1, def str2) {14str1.concat(str2)15}16*/...
public static Class<?>parseClass(String script){GroovyClassLoader classLoader=newGroovyClassLoader(Thread.currentThread().getContextClassLoader());Class<?>clazz=classLoader.parseClass(script);returnclazz;}} 脚本内容 packagecom.example.concrete.starter.third;importcom.alibaba.fastjson.JSON;importcom.exampl...
import groovy.transform.BaseScript setName 'Judith' greet() 这里需要注意:@BaseScript(MyBaseClass)经过我的测试,一定要放在文件的第一页。 另外通过使用这个注解,IDEA里面是可以支持代码提示的。 3.3. Alternate abstract method 虚函数的替身 We have seen that the base script class is a single abstract meth...