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

对于非嵌套结构,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 回答
0

如果你正在使用 groovy,你可以print向元类添加一个方法,比如Object

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

尽管听起来您可能正在担心不必要的问题。您可以使用StringBuilder(或 groovy 的字符串插值)来减少连接。您还可以使用 groovy 的@ToString AST 添加一个toString方法并打开缓存,这样它只会发生一次。

于 2013-07-17T02:18:01.437 回答