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
Groovyを使用している場合はprint
、メタクラスにメソッドを追加できます。Object
Object.metaClass.print = { printStream ->
printStream.print(delegate)
}
不必要な問題を心配しているように聞こえますが。a StringBuilder
(または groovy の文字列補間) を使用して、連結を減らすことができます。また、groovy の@ToString AST を使用してtoString
メソッドを追加し、キャッシュを有効にして、一度だけ実行することもできます。
ネストされていない構造の場合dump()
は、簡単な解決策です。
class Person {
String name
String surname
}
p = new Person(name: "John", surname: "Doe")
println p.dump()
// prints <Person@802ef9 name=John surname=Doe>