Я пытаюсь написать лямбду, которая будет реализовывать @FunctionalInterface
(BiFunction
в этом примере) и будет возвращать объект, сгенерированный с <T>
.
Я могу сделать это со старым подходом, объявляющим обобщенный класс (см. class Extractor<T>
), но я не понимаю, как это сделать с лямбда-выражением.Единственное, что я могу сделать, - это объявить лямбду с «неизвестным» <?>
универсальным типом.
По сути, я хочу объявить лямбду, которую можно передать на method2
.Возможно ли это?
private BiFunction<String, Root<Employee>, Path<?>> extractorLambda =
(fieldName, root) -> root.get(fieldName);
class ExtractorClass<T> implements BiFunction<String, Root<Employee>, Path<T>> {
@Override
public Path<T> apply(final String fieldName, final Root<Employee> root) {
return root.get(fieldName);
}
}
private Specification<Employee> method1(String fieldName,
BiFunction<String, Root<Employee>, Path<?>> extractor) {
return null;
}
private <T> Specification<Employee> method2(String fieldName,
BiFunction<String, Root<Employee>, Path<T>> extractor) {
return null;
}
public void main(String[] args) {
method1("s", extractorLambda); // ok
method2("s", extractorLambda); // error
ExtractorClass<String> extractorClass = new Extractor<>();
method2("s", extractorClass); // ok
}