toString() Generator: Format Templates

Format templates are used by a simple mechanism that allows you to change format of generated method's output string: beginning, ending, separator, and so on. They look similar to JDT code templates but they don't affect the generated code directly (Code Styles are used for that). Here's a list of available template variables:

${object.className}inserts the class name as a simple String
${object.getClassName}inserts a call to this.getClass.getName()
${object.superToString}inserts a call to super.toString()
${object.hashCode}inserts a call to this.hashCode()
${object.identityHashCode}inserts a call to System.identityHashCode(this)
${member.name}inserts the first member's name
${member.name()}inserts the first member's name followed by parenthesis in case of methods
${member.value}inserts the first member's value
${otherMembers}inserts the remaining members. For each member, the template fragment between the first and the last ${member.*} variable is evaluated and appended to the result. The characters between the last ${member.*} and ${otherMembers} define the separator that is inserted between members (${otherMembers} must stand after the last ${member.*} variable).

For the template to work properly, the ${otherMembers} variable must be used exactly once in a template and cannot be followed by any ${member.*} variable. ${object.*} variables can be placed anywhere in the template, although if one is placed in a member related fragment (that is between the first ${member.*} variable and ${otherMembers}), it will be repeated for every member, which is probably not a sensible solution.

The description above might seem complicated, but the template format itself is very easy to use. It should all become clear after seeing some working examples.

Template examples

  1. The default template is a good example:

    ${class.name} [${member.name()}=${member.value}, ${otherMembers}]

    The output string for this template looks like this:

    FooClass[aFloat=1.0, aString=hello, anInt=10, anObject=null, aCharMethod()=a]
  2. Multiple line output is also available:

    ${object.getClassName} {
    	${member.name}: ${member.value}
    	${otherMembers}
    }

    Example result:

    FooClass {
    	aFloat: 1.0
    	aString: hello
    	anInt: 10
    	anObject: null
    	aCharMethod: a
    }
  3. If you enclose a member in braces, don't forget to do the same with ${otherMembers} variable:

    {${member.name}=${member.value}},
    {${otherMembers}}

    Here's the effect:

    {aFloat=1.0},
    {aString=hello},
    {anInt=10},
    {anObject=null},
    {aCharMethod=a}
  4. ${object.*} variables can be used at the beginning and at the end of the template:

    ${object.getClassName} (hashcode:${object.hashCode})
    	members: ${member.name} = ${member.value}; ${otherMembers}
    [super: ${object.superToString}]

    This template would result in an output similar to this:

    FooClass (hashCode:232198409832)
    	members: aFloat = 1.0; aString = hello; anInt = 10; anObject = null; aCharMethod = a
    [super: SuperFooClass[aField=null]]
Generate toString() dialog
toString() Generator: Code Styles
toString() Generator: Content Listing