2012-11-13 81 views
1

什麼是正確的方法來改變單個的方法簽名java對象。假設我想更改toString方法。如何更改單個實例的Java方法實現?

myObject.metaClass.toString = { pritln "hello world" } 

看起來像這個代碼有問題。如果我將我的對象傳入其他Java編譯對象原始toString將被調用。

其他solution創建包裝Object。它已經從最初的一個不同的類,所以它不符合我


補充:
1.我無法控制的創建過程
2.我不知道對象是如何被實例化

所以沒有常規方式要解決這個問題嗎? 唯一的解決方案是創建Java包裝類,包裝所有方法並更改一個?這是一個...

回答

2

您對metaClass所做的任何更改都只對groovy可見。

Java沒有想法元類存在,因此顯然不能調用由它

3

您可以使用annoymous子類中定義的任何替換方法?這將只會覆蓋該單個實例中的toString()方法。

MyObject myObject= new MyObject(){ 
    @Override 
    public String toString(){ 
     println "hello world" 
    } 
}; 
4

如果你想創建一個具有改變一個方法的對象,是有辦法做到這一點使用「匿名類」。

每當創建對象:

MyClass myObject = new MyClass() { 
    public String toString() { 
     ...implementation... 
    } 
} 
0

創建一個擴展的原始包裝器:

public class wrapper extends myObject{ 
    public toString{ 
     System.out.println("hello world"); 
    } 
} 
+0

OP表示,他不希望使用一個包裝類。 – JavaKungFu