更改单个 java对象的方法签名的正确方法是什么。假设我想改变toString
方法。
myObject.metaClass.toString = { pritln "hello world" }
看起来这段代码有问题。如果我将我的对象传递给其他Java编译对象,则会调用原始toString
。
其他solution会创建包装器Object
。它与原版有不同的类,所以它不满足我
加了:
1.我无法控制创作过程
2.我不知道对象是如何实例化的
所以没有 groovy方式 来解决这个问题? 唯一的解决方案是创建Java包装器类,包装所有方法并更改一个?这是......
答案 0 :(得分:4)
如果您想创建一个更改了单个方法的对象,可以使用“匿名类”来实现此目的。
每当创建对象时:
MyClass myObject = new MyClass() {
public String toString() {
...implementation...
}
}
答案 1 :(得分:3)
你能使用匿名子类吗?这只会覆盖该单个实例中的toString()
方法。
MyObject myObject= new MyObject (){
@Override
public String toString (){
println "hello world"
}
};
答案 2 :(得分:2)
您对metaClass所做的任何更改只对groovy可见。
java不知道metaClass是否存在,所以显然不能调用它定义的任何替换方法
答案 3 :(得分:0)
创建一个扩展原文的包装器:
public class wrapper extends myObject{
public toString{
System.out.println("hello world");
}
}