2013-07-17 23 views
1

我可以通過覆蓋其toString()方法來製作課程可打印的課程(即print(x))嗎?還是有其他方法? toString()需要創建一個字符串,我想這會涉及很多浪費的串聯,特別是對於嵌套結構。如何使用Java/Groovy打印課程

如果有print(PrintStream os)方法可用,但似乎找不到一個方法似乎更明智。

+1

所以,你想打印一個字符串represting的對象,而無需創建一個字符串? –

+1

你總是可以使用'StringBuilder',但這聽起來像是過早的優化。 –

+0

基本上我想'print(Object x)'工作。我已經改變了這個問題來反映這一點。 – Clinton

回答

0

你可以儘管這聽起來像你可能會擔心不必要的問題print方法添加到的Object元類,如果你正在使用Groovy和類似

Object.metaClass.print = { printStream -> 
    printStream.print(delegate) 
} 

。你可以使用StringBuilder(或groovy的字符串插值)來減少連接。您也可以使用groovy的@ToString AST來添加toString方法並打開緩存,因此它只發生一次。

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 
0

對於非嵌套結構,dump()是一個快速的解決方案:

class Person { 
    String name 
    String surname 
} 

p = new Person(name: "John", surname: "Doe") 
println p.dump() 
// prints <[email protected] name=John surname=Doe>