如何将getter作为lambda函数传递?

时间:2017-05-19 11:05:01

标签: java lambda java-8

我想将bean的getter作为函数传递。调用该函数时,应调用getter。例如:

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; }
}

使用java 8可以吗?

1 个答案:

答案 0 :(得分:13)

如果MyConverter的构造函数必须使用函数,process必须使用对象,这可能是最好的方法:

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);