具有泛型类型的 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);
添加<>
是全部,这是编译代码所必需的。
【讨论】:
downvoter 能解释一下这个答案有什么问题吗? 谢谢!一旦我再次可以访问我的计算机,就迫不及待地想试试这个。 有效!标记为已回答。以上是关于具有泛型类型的 Java 8 方法参考的主要内容,如果未能解决你的问题,请参考以下文章