2012-02-08 4 views
2

Groovy가 char[]String으로 바꾸는 방법을 알아 내려고 노력 중입니다. GString 안에 있습니다.Groovy가 GString 내에서 char []을 String으로 변환하는 방법은 무엇입니까?

예 :

char[] pchar = ['p', 'a', 's', 's'] 
println "$pchar" 

결과 : 그것은 CHAR []에 toString() 메서드를 사용하는 것이 가정 먼저

패스 (HTTP : //groovy.codehaus .org/groovy-jdk/원시 타입/char []. html # toString()). 그러나 다음 코드를 실행의 결과는 그렇지 제시하는 것 같다

char[] pchar = ['p', 'a', 's', 's'] 
println "$pchar" 

pchar.class.metaClass.toString = {-> 
    "****" 
} 

println pchar.toString() 
println "$pchar" 

결과 :

****

이 통과

나 '

통과 또한 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가이 변환을 수행하는 방법을 알고있는 사람이 있습니까?

답변

9

소스를 검색하면 관련 line is in the source이 표시됩니다. G 스트링을 인스턴스화 할 때, 당신이 G 스트링의 값 속성을 얻는 경우에 당신이 볼 수있는 객체 [] 값을 생성합니다

char[] pchar = ['p', 'a', 's', 's'] 
pchar.values // [pass] 

G 스트링 소스에서를, 결국] [객체 값 (숯불 전달)를 InvokerHelper write() 메서드에 전달합니다.이 메서드는 toString (object)에 값을 전달합니다. toString() 메서드에서 조건과 일치하지 않으며 마지막으로 format() 메서드에 전달합니다. 여기서 source의 행에서 인수가 char 배열인지 확인한 다음 new char 배열의 문자열

if (arguments.getClass().isArray()) { 
     if (arguments instanceof char[]) { 
      return new String((char[]) arguments); 
     } 
     return format(DefaultTypeTransformation.asCollection(arguments), verbose, maxSize); 
    } 
관련 문제