【问题标题】:Java 8 Method reference with generic types具有泛型类型的 Java 8 方法参考
【发布时间】:2014-05-08 04:11:41
【问题描述】:

我在使用 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,它会起作用,但在解决我的实际问题时这不起作用。

【问题讨论】:

    标签: java generics lambda java-8


    【解决方案1】:

    目前您正在尝试使用 raw 映射器类型,它会擦除​​各种东西。

    一旦您开始使用泛型类型,一切都很好 - 类型推断可以帮助您:

    new Mapper<>(TestEvent::setId);
    

    添加&lt;&gt;全部,这是编译代码所必需的。

    【讨论】:

    • downvoter 能解释一下这个答案有什么问题吗?
    • 谢谢!一旦我再次可以访问我的计算机,就迫不及待地想试试这个。
    • 有效!标记为已回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多