我可以通過覆蓋其toString()
方法來製作課程可打印的課程(即print(x)
)嗎?還是有其他方法? toString()
需要創建一個字符串,我想這會涉及很多浪費的串聯,特別是對於嵌套結構。如何使用Java/Groovy打印課程
如果有print(PrintStream os)
方法可用,但似乎找不到一個方法似乎更明智。
我可以通過覆蓋其toString()
方法來製作課程可打印的課程(即print(x)
)嗎?還是有其他方法? toString()
需要創建一個字符串,我想這會涉及很多浪費的串聯,特別是對於嵌套結構。如何使用Java/Groovy打印課程
如果有print(PrintStream os)
方法可用,但似乎找不到一個方法似乎更明智。
你可以儘管這聽起來像你可能會擔心不必要的問題print
方法添加到的Object
元類,如果你正在使用Groovy和類似
Object.metaClass.print = { printStream ->
printStream.print(delegate)
}
。你可以使用StringBuilder
(或groovy的字符串插值)來減少連接。您也可以使用groovy的@ToString AST來添加toString
方法並打開緩存,因此它只發生一次。
+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
對於非嵌套結構,dump()
是一個快速的解決方案:
class Person {
String name
String surname
}
p = new Person(name: "John", surname: "Doe")
println p.dump()
// prints <[email protected] name=John surname=Doe>
所以,你想打印一個字符串represting的對象,而無需創建一個字符串? –
你總是可以使用'StringBuilder',但這聽起來像是過早的優化。 –
基本上我想'print(Object x)'工作。我已經改變了這個問題來反映這一點。 – Clinton