我正在尋找一種方法來覆蓋xor在一個groovy腳本。覆蓋xor在groovy
我已經爲腳本創建了一個基類,其中定義了一個對象。該對象已有一個方法public Object xor(String var)
,其工作方式與myobject^"foo"
類似。我想要的是訪問像myobject^foo
這樣的方法,其中foo像普通字符串一樣處理。
我正在尋找一種方法來覆蓋xor在一個groovy腳本。覆蓋xor在groovy
我已經爲腳本創建了一個基類,其中定義了一個對象。該對象已有一個方法public Object xor(String var)
,其工作方式與myobject^"foo"
類似。我想要的是訪問像myobject^foo
這樣的方法,其中foo像普通字符串一樣處理。
@daggett我發現了失蹤處理的方法屬性:
public abstract class MyBaseScript extends Script implements GroovyObject {
protected class A {
public Object xor(String var) {
//do fancy stuff
return var;
}
}
protected A foo = new A();
//method which handles missing properties
public Object propertyMissing(String name) {
return name;
}
}
我該如何開始我的劇本:
Binding binding = new Binding();
// passing parameters
binding.setVariable("arg0", arg0);
binding.setVariable("args", arg1);
// Compiler Config
CompilerConfiguration cc = new CompilerConfiguration();
ImportCustomizer ic = new ImportCustomizer();
// add some imports for e.g.
ic.addImports("java.awt.Color", "java.util.Calendar",...);
cc.addCompilationCustomizers(ic);
// set BaseClass
cc.setScriptBaseClass("de.MyBaseScript");
// execute script
GroovyClassLoader loader = new GroovyClassLoader();
shell = new GroovyShell(loader, binding, cc);
Script gscript = shell.parse(groovyScriptAsAFile);
Object o = gscript.run();
因爲我知道你想以某種方式做
(myobject^"foo") == (myobject^foo)
所以,在你的腳本,你可以重新定義方法GetProperty(),所以在你的腳本訪問foo的屬性將返回「foo」的字符串..
class A{
public Object xor(Object o){
println "xor $o"
return o
}
}
public getProperty(String key){
if(key in ['out'])return super.getProperty(key) //skip standard properties
return key
}
def myobject=new A()
assert (myobject^foo) == (myobject^"foo")
,但我看不出有什麼好處:)根據您的回答
- 沒辦法。你只能做它只爲財產。在groovy'myobject.getProperty('foo')== myobject.'foo'== myobject.foo' – daggett
這似乎有助於:)。但是我正在用java編寫我的對象(例如A)。所以['out']是我的對象具有的屬性列表(在元類中)? '公共類A延伸GroovyObjectSupport { 公共對象XOR(字符串VAR){ \t \t對象o = \t \t返回O; \t} \t \t @Override \t公共對象的getProperty(String屬性){ \t \t對象o = NULL; \t \t if((o = super.getProperty(property))== null) \t \t \t return property; \t \t return o; \t} }' 但我得到一個MissingPropertyException。什麼是['out']?我怎樣才能在java中調用它? –
從哪裏打電話給你的對象?從groovy腳本?如果是'out'是一個用於'println'函數的標準'groovy.lang.Script'屬性。在我的情況下,我爲腳本重新定義'getProperty'而不是對象。只要檢查誰在拋出MissingPropertyException,你就會明白。 – daggett
你能否提供一些更多的信息?我不確定你的意思是什麼,我想要的是訪問像myobject這樣的方法^ foo,其中foo像普通的String一樣處理。 – tylerwal
我爲我的groovy腳本編寫了一個java基類。在那裏我定義了一個對象來提供對圖形數據庫的訪問。我想通過名稱訪問這些節點,例如'db^nodename'或'db^nodename^nodename2 ...'。我已經有的方法是'public Object xor(String var)',但是不幸的是我必須寫'db ^「nodename」'。在這種情況下, –