У меня возникают проблемы с ссылкой на метод Java 8 в сочетании с типичными типами. Я упростил свою проблему, чтобы дать понять, где проблема. Не удалось выполнить следующий код:
public static void main(String[] args) {
new Mapper(TestEvent::setId);
}
private static class Mapper<T> {
private BiConsumer<TestEvent, T> setter;
private Mapper(BiConsumer<TestEvent, T> setter) { this.setter = setter; }
}
private static class TestEvent {
public void setId(Long id) { }
}
Но если я изменю вызов конструктора на
BiConsumer<TestEvent, Long> consumer = TestEvent::setId;
new Mapper(consumer);
Все работает. Может кто-нибудь объяснить, почему?
Я знаю, что он работает, если я удалю общий тип (T) и использую Long вместо этого, но это не сработает при решении моей реальной проблемы.