我是否可以通过覆盖其print(x)
方法使类可打印(即toString()
有效),还是有其他方法? toString()
需要创建一个字符串,我想这将涉及大量浪费的连接,特别是对于嵌套结构。
如果有print(PrintStream os)
方法,似乎更明智,但我找不到。
答案 0 :(得分:2)
+1 @Jeff。您也可以将@Canonical与@ToString注释一起使用。
import groovy.transform.*
@ToString(includeNames=true, cache=true)
@Canonical class Test{
String a
int b
Book book
}
@ToString(includeNames=true, cache=true)
@Canonical class Book{
String name
}
Test test = new Test('A', 1, new Book("Groovy In Action"))
//Prints
//Test(a:A, b:1, book:Book(name:Groovy In Action))
print test
println ""
System.out.print test
答案 1 :(得分:0)
如果您正在使用groovy,可以向print
的元类添加Object
方法,例如
Object.metaClass.print = { printStream ->
printStream.print(delegate)
}
虽然听起来你可能会担心一个不必要的问题。您可以使用StringBuilder
(或groovy的字符串插值)来减少连接。您还可以使用groovy的@ToString AST来添加toString
方法并启用缓存,这样只会发生一次。
答案 2 :(得分:0)
对于非嵌套结构,dump()
是一种快速解决方案:
class Person {
String name
String surname
}
p = new Person(name: "John", surname: "Doe")
println p.dump()
// prints <Person@802ef9 name=John surname=Doe>