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