Groovy literal StringBuilder/StringBuffer

Viewed 37791

Groovy supports a literal syntax for creating a StringBuilder/StringBuffer instead of the usual

def sb = new StringBuilder()

However, I can't seem to remember (or find on Google) the correct syntax.

4 Answers

String.leftShift() creates a StringBuffer.

AFAICS, you cannot create a StringBuilder via groovy syntax sugar. You can only create a StringBuilder explicitly. No operator overload on String or GString creates a StringBuilder that you can explicitly use. Java String concatenation might create a StringBuilder, but that instance wouldn't be usable in your code.

At the time of writing this answer:

  • Another answer said to use <<=. <<= is merely a java compound assignment that uses <<. In particular, there is no method for overloading <<=.
  • The accepted answer said to use ''<<'' //4 single quotes, not double quotes. Double quotes work fine, at least on modern groovy.

The following code shows that we always get a StringBuffer, not a StringBuilder, for the result of various combinations of << vs <<= and "" vs '':

def ls = ''<<''
println ls.class
def lse = ''
lse <<=''
println lse.class

ls = ""<<''
println ls.class
lse = ""
lse <<=''
println lse.class

ls = ''<<""
println ls.class
lse = ''
lse <<=""
println lse.class

ls = ""<<""
println ls.class
lse = ""
lse <<=""
println lse.class

prints:

class java.lang.StringBuffer
class java.lang.StringBuffer
class java.lang.StringBuffer
class java.lang.StringBuffer
class java.lang.StringBuffer
class java.lang.StringBuffer
class java.lang.StringBuffer
class java.lang.StringBuffer
Related