2009-08-14 34 views
8

Trong Groovy bạn có thể thực hiện các chuyển đổi kiểu đáng ngạc nhiên bằng cách sử dụng toán tử as hoặc phương pháp asType. Ví dụ nhưChuyển đổi loại Groovy

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

Tôi ngạc nhiên mà tôi có thể chuyển đổi từ một Integer đến một ngắn và từ một Set vào một danh sách, vì không có "là một" mối quan hệ giữa các loại, mặc dù họ làm chung một chung tổ tiên.

Ví dụ, đoạn mã sau là tương đương với Integer/example ngắn về mối quan hệ giữa các loại tham gia vào việc chuyển đổi

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

def c = new Child1() as Child2 

Nhưng tất nhiên ví dụ này thất bại. Chính xác các quy tắc chuyển đổi loại nào sau toán tử as và phương pháp asType?

Trả lời

5

Theo những gì Ruben đã chỉ ra kết quả cuối cùng của:

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

Set collection = new ArrayList(new HashSet()) 

Phương pháp asType nhận ra bạn đang muốn một List và trở thành một thực tế HashSet là một Collection, nó chỉ sử dụng phương thức khởi tạo của ArrayList có số Collection.

Đối với số một, nó chuyển đổi Integer thành Number, sau đó gọi phương thức shortValue.

Tôi không nhận ra có quá nhiều logic trong việc chuyển đổi các tham chiếu/giá trị như thế này, lòng biết ơn chân thành của tôi đối với Ruben vì đã chỉ ra nguồn, tôi sẽ tạo một vài bài đăng trên blog về chủ đề này.

Các vấn đề liên quan