'How does Groovy translate from char[] to String within a GString?
I'm trying to figure out how Groovy translates a char[] to a String within a GString.
Example:
char[] pchar = ['p', 'a', 's', 's']
println "$pchar"
Result:
pass
At first I assumed it would use the toString() method on char[] (http://groovy.codehaus.org/groovy-jdk/primitive-types/char[].html#toString()). But the results of running the following code seems to suggest otherwise:
char[] pchar = ['p', 'a', 's', 's']
println "$pchar"
pchar.class.metaClass.toString = {->
"****"
}
println pchar.toString()
println "$pchar"
Result:
pass
****
pass
I've also tried overriding invokeMethod() to try figuring it out to no avail:
char[] pchar = ['p', 'a', 's', 's']
println "$pchar"
pchar.class.metaClass.toString = {->
"****"
}
pchar.class.metaClass.invokeMethod = {String methodName, Object arguments ->
println("Method called on ${delegate.class}: $methodName, $arguments")
def metaMethod = delegate.metaClass.getMetaMethod(methodName)
return metaMethod.invoke(delegate, arguments)
}
println pchar.toString()
println "$pchar"
Result:
pass
Method called on class [C: toString, []
****
pass
Does anyone know how Groovy does this transformation?
Solution 1:[1]
char[] pchar = ['p', 'a', 's', 's']
assert pchar.join() == 'pass'
println "${pchar.join()}"
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Jose Quijada |
