1

print(x)クラスのメソッドをオーバーライドすることで、クラスを印刷可能にする (つまり、機能させる) ことはできますtoString()か? または、他の方法はありますか? toString()文字列を作成する必要がありますが、特にネストされた構造の場合、多くの無駄な連結が含まれると思います。

利用可能な方法があればもっと賢明に思えprint(PrintStream os)ますが、私はそれを見つけることができませんでした.

4

3 に答える 3

2

+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
于 2013-07-17T02:25:58.437 に答える
0

Groovyを使用している場合はprint、メタクラスにメソッドを追加できます。Object

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

不必要な問題を心配しているように聞こえますが。a StringBuilder(または groovy の文字列補間) を使用して、連結を減らすことができます。また、groovy の@ToString AST を使用してtoStringメソッドを追加し、キャッシュを有効にして、一度だけ実行することもできます。

于 2013-07-17T02:18:01.437 に答える
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>
于 2013-07-17T13:12:49.417 に答える