Я пытаюсь выяснить, как Groovy переводит char[]
в String
в GString
.
Пример:
char[] pchar = ['p', 'a', 's', 's']
println "$pchar"
Результат:
pass
Сначала я предполагал, что он будет использовать метод toString () для char [] (http://groovy.codehaus.org/groovy-jdk/primitive-types/char[].html#toString()). Но результаты выполнения следующего кода, похоже, указывают на обратное:
char[] pchar = ['p', 'a', 's', 's']
println "$pchar"
pchar.class.metaClass.toString = {->
"****"
}
println pchar.toString()
println "$pchar"
Результат:
pass
****
pass
Я также попытался переопределить invokeMethod()
, чтобы попытаться понять это безрезультатно:
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"
Результат:
pass
Метод вызывается в классе [C: toString, []
****
pass
Кто-нибудь знает, какGroovy делает это преобразование?