1

更改单个java 对象的方法签名的正确方法是什么。假设我想改变toString方法。

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

看起来这段代码有问题。如果我将我的对象传递给其他 Java 编译对象,则原始对象toString将被调用。

其他解决方案创建 wrapper Object。它与原来的等级不同,所以它不能满足我


补充:
1.我无法控制创建过程
2.我不知道对象是如何实例化的

那么没有解决这个问题的常规方法吗?唯一的解决方案是创建 Java 包装类,包装所有方法并更改一个?这是一个 ...

4

4 回答 4

4

如果您想创建一个更改了单个方法的对象,有一种方法可以使用“匿名类”来实现。

每当创建您的对象时:

MyClass myObject = new MyClass() {
    public String toString() {
        ...implementation...
    }
}
于 2012-11-13T22:20:46.273 回答
3

你可以使用一个匿名子类吗?这只会覆盖该toString()单个实例中的方法。

MyObject myObject= new MyObject (){
    @Override
    public String toString (){
         println "hello world"
    }
};
于 2012-11-13T22:20:19.133 回答
2

您对元类所做的任何更改仅对 groovy 可见。

java不知道metaClass的存在,所以显然不能调用它定义的任何替换方法

于 2012-11-13T22:19:47.933 回答
0

创建一个扩展原始的包装器:

public class wrapper extends myObject{
    public toString{
        System.out.println("hello world");
    }
}
于 2012-11-13T22:21:12.543 回答