我在使用 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 会奏效,但在解决我的实际问题时这不会奏效。
最佳答案
目前您正在尝试使用 raw 映射器类型,它会删除所有类型的内容。
一旦您开始使用泛型类型,一切都很好 - 类型推断可以帮助您:
new Mapper<>(TestEvent::setId);
添加<>
是编译代码所需的全部。
关于具有泛型类型的 Java 8 方法引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22717234/