2016-12-30 14 views
6

Điều gì sẽ tương đương với Java 8 :: (double colon operator) trong Groovy?Tương đương Groovy của toán tử Java 8 :: (dấu hai chấm)

Tôi đang cố gắng để dịch ví dụ này trong groovy https://github.com/bytefish/PgBulkInsert

Nhưng phần lập bản đồ không làm việc theo cách tương tự như Java 8:

public PersonBulkInserter() { 
    super("sample", "unit_test"); 

    mapString("first_name", Person::getFirstName); 
    mapString("last_name", Person::getLastName); 
    mapDate("birth_date", Person::getBirthDate); 
} 
+2

Có vẻ toán tử con trỏ phương thức Groovy '. &' Là gần nhưng mong đợi một cá thể của lớp khai báo. – manouti

+0

Thật vậy, tôi sẽ cần một "Giao diện chức năng" cho một lớp Groovy. https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html – Wavyx

+3

Thật khó để nói mà không nhìn thấy mã cho 'mapString()' và 'mapDate() của bạn 'phương pháp, nhưng có thể một cái gì đó như thế này sẽ làm việc:' mapString ("first_name", {it.firstName} là chức năng) '. Nó không hiệu quả như ký hiệu giao diện function-pointer-to-lambda-to-Functional trong java 8, nhưng tôi nghĩ nó sẽ làm việc giống nhau. – BalRog

Trả lời

6

Groovy không thực sự có dụ-ly dị các tham chiếu phương thức thể hiện (EDIT: Tuy nhiên,. Xem nhận xét của Wavyx về câu trả lời này), vì vậy thay vào đó bạn phải giả mạo nó bằng các bao đóng. Khi sử dụng cú pháp tham chiếu instance-method trong Java 8, bạn thực sự thiết lập tương đương với một lambda mà mong đợi cá thể gọi là đối số đầu tiên (trong trường hợp này, chỉ).

Vì vậy, để có được hiệu ứng tương tự trong Groovy, chúng ta phải tạo một bao đóng sử dụng đối số mặc định it làm ví dụ gọi. Như thế này:

PersonBulkInserter() { 
    super("sample", "unit_test") 

    mapString("first_name", { it.firstName } as Function) 
    mapString("last_name", { it.lastName } as Function) 
    mapDate("birth_date", { it.birthDate } as Function) 
} 

Thông báo việc sử dụng các ký hiệu sở hữu Groovy ở đây, và rằng nó là cần thiết để đúc các Closure để loại @FunctionalInterface mong đợi của các mapString() hoặc mapDate() phương pháp.

+4

Java 8 :: (dấu hai chấm) sẽ được thêm vào năm 2017 https://twitter.com/glaforge/status/814890698369593348 – Wavyx

+0

Điều này có được phát hành không? –

+0

Không có ý tưởng. Bạn có thể thử tweeting "glaforge" để cập nhật (Xem liên kết trong nhận xét của Wavyx). Tôi nghe anh ấy khá nhạy bén. – BalRog

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