如何使用Java / Groovy使类可打印

时间:2013-07-17 01:43:23

标签: java groovy

我是否可以通过覆盖其print(x)方法使类可打印(即toString()有效),还是有其他方法? toString()需要创建一个字符串,我想这将涉及大量浪费的连接,特别是对于嵌套结构。

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果您正在使用groovy,可以向print的元类添加Object方法,例如

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

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

答案 2 :(得分: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>