2017-05-19 23 views
9

Tôi muốn chuyển getter của bean thành một hàm. Khi hàm được gọi là getter nên được gọi. Ví dụ:Làm thế nào để vượt qua một getter như chức năng lambda?

public class MyConverter { 
    public MyConverter(Function f) { 
      this.f = f; 
    } 

    public void process(DTO dto) { 
     // I just want to call the function with the dto, and the DTO::getList should be called 
     List<?> list = f.call(dto); 
    } 
} 

public class DTO { 
    private List<String> list; 
    public List<String> getList() { return list; } 
} 

Có thể với java 8 không?

+0

Tôi có thể hỏi tại sao bạn cần để đóng gói các chức năng trong lớp 'MyConverter' ? Và bạn đang làm gì trong phương thức 'process' của bạn với kết quả? Tôi hỏi vì có vẻ như bạn chỉ cần ánh xạ một giá trị nhất định cho một kết quả (thông qua hàm được cung cấp) và thực sự xử lý nó. Trong thực tế, lớp 'MyConverter' trông giống một bộ xử lý hơn là một trình biến đổi. –

Trả lời

12

Nếu constructor của MyConverter phải mất một chức năng, và process phải mất một đối tượng, điều này có lẽ là cách tốt nhất:

class MyConverter<T> { 
    //    V takes a thing (in our case a DTO) 
    //      V returns a list of Strings 
    private Function<T, List<String>> f; 

    public MyConverter(Function<T, List<String>> f) { 
      this.f = f; 
    } 

    public void process(T processable) { 
     List<String> list = f.apply(processable); 
    } 
} 

MyConverter<DTO> converter = new MyConverter<>(DTO::getList); 

DTO dto = new DTO(); 
converter.process(dto); 
+0

Tôi không thể chuyển dto * instance * vào hàm tạo. Tôi phải vượt qua dụ (và chỉ có thể hiện) trong 'process (dto)'. Vì vậy, tôi phải cung cấp hàm getter như một hàm bằng cách nào đó vào hàm dựng (constructor) – membersound

+0

Vì vậy, có gì sai với quá trình void public cũ (Dto dto) {List list = dto.getList(); } '? – Michael

+0

Mục tiêu của tôi là «Trình chuyển đổi' không được biết về việc thực thi' DTO', và không biết cách truy xuất dữ liệu đối tượng 'getList()'. Điều đó nên được truyền từ bên ngoài, tất nhiên nếu không tôi sẽ không cần một công cụ chuyển đổi. – membersound

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