java - 使用泛型类时 lambda 使用者参数的类型未知

标签 java generics lambda java-8

我有一个与下面类似的代码,并且由于某种原因,当我调用一个采用 Consumer<BigDecimal> 的方法时带有 lambda 的参数,lambda 参数的类型为 Object而不是BigDecimal 。如果有 BigDecimal 的任何方法,这会导致 lambda 内“无法解析方法”调用 lambda 参数。仅当采用消费者的方法位于泛型类中时才会发生这种情况,但是没有泛型参与该消费者采用方法。

public class Creator<T> {

    private T something;

    private Consumer<BigDecimal> consumer;

    public Creator(T something) {
        this.something = something;
    }

    public void create(Consumer<BigDecimal> consumer) {
        this.consumer = consumer;
    }

}

public class Processor {
    public void process(Creator creator) {
        creator.create(big -> big.abs());
                                  ^^^^^-------------------- Cannot resolve method
    }
}

如果我删除通用参数 <T>从 Creator 类中,它可以工作,即使泛型不触及 create()方法

这有什么问题吗?

最佳答案

public void process(Creator creator) {

在这一行中,您使用 Creator 作为原始类型,这基本上破坏了类型推断。

至少要写

public void process(Creator<?> creator) {

关于java - 使用泛型类时 lambda 使用者参数的类型未知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40004194/

相关文章:

java - 无法找到 url 状态/无法 ping 一个 url(启用 SSL 的主机)并处理无效的 SSL 证书

java - 如何返回一个值,但继续循环?

java - 通用类创建

java - @Nullable 与泛型 (Eclipse)

python - 将 lambda 函数添​​加在一起的便捷方式?

java - Spring MVC 2.5 或 3 指南

java - 领域对象/服务和业务逻辑层

java - 从 Iterator<T> 转换为 Iterator<U>,其中 T 是 U 的子类

java - 为什么我收到错误 "Lambda expressions are not supported in -source 1.6"?

python - PyQt5 按钮 lambda 变量变为 bool 值