2011-11-17 6 views
2

나는 누군가 다른 사람의 Grails의 코드를 검토하고 난 다음을 참조 :암시 적 유형 변환?

그것은이 라인을 설정 한 후 보이는
Set<Integer> weeks = new ArrayList<Integer>() 

은, Grails는이 주가 HashSet이라고 생각합니다. 나는 Java 나 Grails에 익숙하지 않고 ArrayList extends List와 HashSet extends Set처럼 (java) 문서가 보이지만이 직접 작성은 작동하지 않는다. Grails 일인가요? 감사.

+0

나는 Grail을 모른다. 그러나이 코드는 잘 컴파일되고 있는가? TypeMismatch 오류가 없습니다> – Zohaib

답변

4

Groovy에서 new ArrayList<Integer>()을보기에는 다소 이상한데 []이 동일하게 작동하고 길지 않으므로 Set<Integer> weeks = []으로 작성했습니다. Groovy는 한 컬렉션 유형을 다른 컬렉션 유형으로 변환하는 중입니다. []은 홀더를 생성하고 초기 데이터 (있는 경우)를 채우는 편리한 방법입니다. 및 [:]의 경우 [] 이외의 다른 구문 모음이 없기 때문에 이러한 변환이 필요합니다.

def weeks = [] as Set이 더 일반적인 구문 일 것입니다. 이것은 []이 일시적이며 변환을 "as"로 사용하고 왼쪽에 유형을 선언하는 것보다 더 명확하게 명시되어 있기 때문에 더욱 분명합니다.

또한 이것을 사용하여 컬렉션을 배열로 변환 할 수 있습니다. 자바 구문을 사용하여 중괄호를 사용하고 클로저 정의처럼 보이는 배열을 만들 수 없으므로 int[] numbers = new int[] { 1, 2, 3 } 대신 int[] numbers = [1, 2, 3] 또는 def numbers = [1, 2, 3] as int[]을 사용해야합니다.