覆盖单个对象的 toString 方法

Override toString method for a single object

假设我有这个代码:

MyClass obj1 = new MyClass()
MyClass obj2 = new MyClass()

MyClass.groovy中的toString()方法是这样实现的:

String toString() {
    "Instance of MyClass"
}

但是,我想 obj1 到 return 打印时的其他内容。我该怎么做?我尝试了这两个选项,但都没有用。

obj1.metaClass.toString = {
    "Object 1"
}

obj1.toString = {
    "Object 1"
}

第一个根本不起作用,第二个导致错误。在 Groovy 中执行此操作的正确方法是什么?

正确的语法是这样的:

obj1.metaClass.toString = { ->
    "Object 1"
}

由于不包括 ->,闭包采用了默认参数,但由于实际的 toString() 方法不采用任何参数,我覆盖了错误的方法。

Edit:这仅在您手动包含对 toString() 的调用时有效,如:print obj1.toString() .