首页 > 解决方案 > 覆盖单个对象的 toString 方法

问题描述

假设我有这个代码:

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

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

String toString() {
    "Instance of MyClass"
}

但是,我想obj1在打印时返回其他内容。我该怎么做?我尝试了这两个选项,但都没有奏效。

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

obj1.toString = {
    "Object 1"
}

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

标签: groovyoverridingtostring

解决方案


正确的语法是这样的:

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

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

编辑:仅当您手动将调用包括在内时才有效toString()print obj1.toString()


推荐阅读