2015-06-01 34 views
2

我想通過攔截對某些方法的調用來重現默認參數的行爲。下面的代碼試圖給當方法顯示被稱爲不帶參數的默認參數:在調用之前更改和添加方法參數

class Thing 
{ 
    void display(String text) 
    { 
     println(text) 
    } 

    def invokeMethod(String name, args) 
    { 
     if(name == "display" && args.length == 0) 
     { 
      metaClass.getMetaMethod(name, ["some text"]). 
       invoke(this, "some text") 
     } 
     else 
     { 
      metaClass.getMetaMethod(name, args). 
       invoke(this, args) 
     } 
    } 
} 
Thing thing = new Thing() 
thing.display("stuff") //prints "stuff" 
thing.display() //nothing happens 

然而,這不起作用;沒有參數時沒有打印。

這個例子不是很有用,但我想讓它工作;我的下一個目標確實是創造可以以他們的名義給出論點的方法。例如:

Add1And2()// should return 3 
Add4And9()// should return 13 

攔截調用這些不存在的方法,並調用現有的方法,將使用的方法不存在名稱中使用的數字將有可能做加法...

回答

4

Thing應執行GroovyInterceptable以使invokeMethod工作:

class Thing implements GroovyInterceptable { 
    void display(String text) { 
     println(text) 
    } 

    def invokeMethod(String name, args) { 
     if(name == "display" && args.length == 0) { 
      metaClass.getMetaMethod(name).invoke(this, "some text") 
     } else { 
      metaClass.getMetaMethod(name, args).invoke(this, args) 
     } 
    } 
} 

Thing thing = new Thing() 
thing.display("stuff") //prints "stuff" 
thing.display() 
相關問題