如何使用Java/Groovy使类可打印
我可以通过重写类的如何使用Java/Groovy使类可打印,java,groovy,Java,Groovy,我可以通过重写类的toString()方法使类可打印(即print(x)works),还是有其他方法toString()需要创建一个字符串,我想这将涉及大量浪费的串联,特别是对于嵌套结构 如果有可用的print(PrintStream os)方法,似乎更明智,但我找不到。如果使用groovy,您可以向对象的元类添加print方法,以及类似的方法 Object.metaClass.print = { printStream -> printStream.print(delegate)
toString()
方法使类可打印(即print(x)
works),还是有其他方法toString()
需要创建一个字符串,我想这将涉及大量浪费的串联,特别是对于嵌套结构
如果有可用的
print(PrintStream os)
方法,似乎更明智,但我找不到。如果使用groovy,您可以向对象的元类添加print
方法,以及类似的方法
Object.metaClass.print = { printStream ->
printStream.print(delegate)
}
虽然听起来你可能在担心一个不必要的问题。您可以使用StringBuilder
(或groovy的字符串插值)来减少连接。您还可以使用groovy的AST添加一个toString
方法,并打开缓存,使其只发生一次。+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
对于非嵌套结构,dump()
是一种快速解决方案:
class Person {
String name
String surname
}
p = new Person(name: "John", surname: "Doe")
println p.dump()
// prints <Person@802ef9 name=John surname=Doe>
class-Person{
字符串名
串姓
}
p=新人(姓名:“约翰”,姓氏:“Doe”)
println p.dump()
//印刷品
那么您想打印表示对象的字符串而不创建字符串吗?您可以始终使用StringBuilder
,但这听起来像是过早的优化。基本上,我希望打印(对象x)
。为了反映这一点,我改变了问题。有什么答案有用吗?