groovy - 覆盖单个对象的 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 中执行此操作的正确方法是什么?
解决方案
正确的语法是这样的:
obj1.metaClass.toString = { ->
"Object 1"
}
通过不包括->
闭包采用默认参数,但由于实际toString()
方法不采用任何参数,因此我覆盖了错误的方法。
编辑:仅当您手动将调用包括在内时才有效toString()
:print obj1.toString()
。
推荐阅读
- java - 连接到 cloudera impala 环境时出现 Kerberos 错误
- visual-studio-code - 设置新的键绑定快捷方式使复制不起作用
- excel - 循环查找并用颜色标记不会停止 - 不知道为什么
- sql - SQL:如果具有相关记录的另一个表没有特定值,则从一个表中选择记录
- reactjs - withFormik,将函数作为道具传递
- javascript - 如何使 node.js localhost 公开
- ruby-on-rails - 在散列数组中转换散列的散列
- c# - 使用 HtmlFieldPrefix 将数据发布到操作会产生空模型
- php - 如何使用 htaccess 将 url 重定向到动态子域?
- reactjs - 如何从当前组件重定向到另一个组件,并将道具传递给 React 中的重定向组件