簡體   English   中英

實例化groovy類的正確方法

[英]Correct way to instantiate a groovy class

我想低調講課,我有些擔心

我的首選是使用GroovyShell

常規腳本:

class Foo {
    public String doStuff(String stuff) {
        return stuff + "_utils";
    }
}
new Foo(); // ??

主腳本:

GroovyShell shell = new GroovyShell();
Script script = shell.parse(new File(path));
def clazz = script.run();
String result = clazz.doStuff("test");
print(result); // test_utils;

第二種選擇是使用GroovyClassLoader

常規腳本

class Foo {
    public String doStuff(String stuff) {
        return stuff + "_utils";
    }
}

主腳本

GroovyClassLoader loader = new GroovyClassLoader();
Script script = loader.parseClass(new File(path))
Object clazz = script.newInstance();
Object[] args = new Object[1];
args[0] = "test";
String result = clazz.invokeMethod("doStuff", args);
print(result) // test_utils

兩者都可以正常運行,我更喜歡使用GroovyShell,因為我在當前代碼中到處都使用它,但是我不知道腳本中的new Foo()是否會導致內存泄漏。 可能嗎?

GroovyShell使用默認的GroovyClassLoader。 因此,如果您不需要GroovyClassLoader提供的任何其他特定功能,則應堅持使用GroovyShell使其保持簡單。 GroovyShell和GroovyClassLoader是收集的垃圾的實例,我不認為這兩個實例都存在內存泄漏。

在@ daggett的幫助下,我設法找到了適合我需要的解決方案。

我根本不會使用groovy類。

一個簡單的例子

實用groovy腳本:

String doStuff() {
    return "doStuff";
}

String doStuff2(){
    return "doStuff2";
}

從主要的Groovy腳本調用實用程序方法

GroovyShell shell = new GroovyShell();
Script utilsScript = shell.parse(new File(PATH_TO_UTIL_SCRIPT));
String result = utilsScript.doStuff();
println(result); // doStuff;
String result2 = utilsScript.doStuff2();
println(result2); // doStuff2;

這不是原始問題的答案,但是由於它適合我的需求,所以我很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM