我可以print(x)
通过覆盖其toString()
方法来使类可打印(即有效),还是有其他方法?toString()
需要创建一个字符串,我想这会涉及很多浪费的连接,特别是对于嵌套结构。
如果有可用的方法似乎更明智print(PrintStream os)
,但我找不到。
+1 @杰夫。您还可以将@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
对于非嵌套结构,dump()
是一个快速的解决方案:
class Person {
String name
String surname
}
p = new Person(name: "John", surname: "Doe")
println p.dump()
// prints <Person@802ef9 name=John surname=Doe>
如果你正在使用 groovy,你可以print
向元类添加一个方法,比如Object
Object.metaClass.print = { printStream ->
printStream.print(delegate)
}
尽管听起来您可能正在担心不必要的问题。您可以使用StringBuilder
(或 groovy 的字符串插值)来减少连接。您还可以使用 groovy 的@ToString AST 添加一个toString
方法并打开缓存,这样它只会发生一次。