2012-05-22 34 views
5

Vì vậy, Groovy có cú pháp tương đối tiện dụng này để chuyển đổi các phương thức thành các bao đóng, ví dụ:Làm cách nào để chuyển đổi một hàm tạo lớp Groovy thành một Closure?

[1,2,3].each { println it } 

// is equivalent to 

[1,2,3].each this.&println 

Nhưng làm cách nào để chuyển đổi một Constructor lớp, ví dụ

[1,2,3].collect { new Thing(it) } 

// is equivalent to 

[1,2,3].collect ???? 

phản ánh Groovy của có Thing.constructors Danh sách kiểm tra, nhưng tôi không thể tìm ra nơi để đặt dấu và trong Thing.constructors[0].

+0

Đây là một câu hỏi hay. Tôi sẽ tưởng tượng rằng điều đó là không thể, vì Groovy thừa hưởng sự khác biệt của Java giữa các phương thức và các hàm tạo (tức là các hàm tạo không chỉ là các phương thức lớp); nhưng ai biết được? :) – epidemian

Trả lời

6

Bạn có thể sử dụng invokeConstructor metaClass method để gọi hàm tạo cho các đối số đã cho.

class Thing { 
    Thing(Integer num) { this.num = num } 
    Integer num 
} 

[1,2,3].collect Thing.metaClass.&invokeConstructor 
+0

Tuyệt vời, nó hoạt động. Tôi muốn có một cái gì đó ngắn gọn hơn như 'Thing. & New' nhưng đó là Java cho bạn. Bạn có biết nếu có những lợi ích hiệu suất hoặc hạn chế của điều này trên '{new Thing (it)}'? – blendmaster

+0

Xin lỗi, tôi không biết điều đó –

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