覆盖单个对象的 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()
.
假设我有这个代码:
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()
.