具有泛型类型的 Java 8 方法参考

Posted

技术标签:

【中文标题】具有泛型类型的 Java 8 方法参考【英文标题】:Java 8 Method reference with generic types 【发布时间】: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,它会起作用,但在解决我的实际问题时这不起作用。

【问题讨论】:

【参考方案1】:

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

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

new Mapper<>(TestEvent::setId);

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

【讨论】:

downvoter 能解释一下这个答案有什么问题吗? 谢谢!一旦我再次可以访问我的计算机,就迫不及待地想试试这个。 有效!标记为已回答。

以上是关于具有泛型类型的 Java 8 方法参考的主要内容,如果未能解决你的问题,请参考以下文章

Java程序员必备基础:泛型解析

java泛型——泛型类泛型方法泛型接口

20175316盛茂淞 2018-2019-2 《Java程序设计》第8周学习总结

JAVA——泛型类和泛型方法(静态方法泛型)

具有泛型类型的 Java 8 方法参考

20175213 2018-2019-2 《Java程序设计》第8周学习总结