我有一个与下面类似的代码,并且由于某种原因,当我调用一个采用 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/