2009-08-14 7 views
8

Groovy에서는 as 연산자 또는 asType 메소드를 사용하여 놀라운 유형 변환을 수행 할 수 있습니다. 예를 들면 Groovy 유형 변환

Short s = new Integer(6) as Short 
List collection = new HashSet().asType(List) 

에는 이러한 유형의 관계 "는이다"가 없기 때문에 그들은 일반적인을 공유 할 수 있지만 나는, 나는 목록에 짧은 정수에서와 세트로 변환 할 수있는 놀랍군요

포함 선조.

는 예를 들어, 다음 코드는 변환

class Parent {} 
class Child1 extends Parent {} 
class Child2 extends Parent {} 

def c = new Child1() as Child2 

그러나이 예에 실패 과정에 관여하는 유형 간의 관계의 측면에서 정수/짧은 예에 해당합니다. as 연산자와 asType 메서드 뒤에 정확히 형식 변환 규칙이 있습니까?

답변

5

:

Set collection = new HashSet().asType(List) 

asType 방법은 당신이 List을 원하고 HashSetCollection 인 사실되고 있습니다 인식
Set collection = new ArrayList(new HashSet()) 

입니다 그냥 ArrayList의 생성자를 사용하는데, 이는 Collection입니다.

숫자 1은 IntegerNumber으로 변환 한 다음 shortValue 메서드를 호출합니다.

루빈이 소스를 지적 해 준 것에 대한 감사의 말과 같이 참조/값을 변환하는 데 너무 많은 논리가 있다는 것을 깨닫지 못했습니다.이 주제에 대해 많은 블로그 게시물을 작성하게 될 것입니다.