Как передать геттер как лямбда-функцию?

Я хочу передать геттер Боба как функцию. Когда функция вызывается геттер должен быть вызван. Пример:

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 ответов


Если конструктор 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);