2012-02-20 2 views
2

내가 개체 배열을 생성하는 것을 시도하고있다 (개체 []) 방법 (IDescriptor)에 전달된다 :객체 배열에서 Groovy Boolean을 가져 오는 것을 방지하려면 어떻게해야합니까?

Object[] newValues = { 
    Boolean.TRUE 
} 
descriptor.setParameters(newValues) 

특정 기술자는 어레이의 첫번째 값이 java.lang의 것으로 기대한다. 부울 개체입니다. 그러나 Groovy가 자체 부울 클래스로 변환하는 것처럼 보이고 코드를 실행할 때 (위 코드는 전체 코드가 아님), 배열의 첫 번째 Object가 java.lang.Boolean 객체가 아니라고보고합니다. 어떻게

assert newValues[0] instanceof java.lang.Boolean 
     |  | | 
     |  | false 
     |  [email protected] 
     [[email protected]] 

수 있습니다 : 나는 어설 션 (오류 반복)를 추가하면

org.openscience.cdk.exception.CDKException: The first parameter must be of type Boolean 
     at org.openscience.cdk.qsar.descriptors.molecular.AromaticAtomsCountDescriptor.setParameters(AromaticAtomsCountDescriptor.java:118) 

, 나는이 오류가 :

하지 매우 유익한 것으로,이 스택 트레이스입니다 Groovy가 더 풍부한 클래스 대신 배열에서 Java Boolean 클래스를 사용하는지 확인하십시오.

답변

3

올바른 괄호를 사용

Object[] newValues = [ true ] 

당신은 폐쇄를 생성 {}을 사용했다. 클로저는 특별한 능력을 많이 가지고 있기 때문에 작동하지만리스트는 배열이 아닙니다. 따라서 Groovy는 목록의 오른쪽에 단일 요소를 래핑 한 다음 배열 newValues을 할당합니다.

+0

쿨! 그래, 단언 오류 메시지가 나에게 그 힌트를 줘야 했어! –

+0

내가 같은 함정에 빠졌기 때문에 나는 단지 알았다. 제 경우에는'Map x = {...}'를 사용하고 있었고 클로저는 맵처럼 작동하기 때문에 대부분의 코드가 실제로 작동했지만 어떤 이상한 경우에는 실패했습니다. –

관련 문제