Java “我怎么到处走动?”;对象无法转换";在双消费者lambda函数中?

Java “我怎么到处走动?”;对象无法转换";在双消费者lambda函数中?,java,generics,lambda,Java,Generics,Lambda,我有一个类(过滤器),它有几个变量: class Filter { Integer intVal; Double doubleVal; String strVal; public Integer getIntVal() { return intVal; } public void setIntVal(Integer intVal) { this.intVal = intVal; } public

我有一个类(
过滤器
),它有几个变量:

class Filter {
    Integer intVal;
    Double doubleVal;
    String strVal;

    public Integer getIntVal() {
        return intVal;
    }

    public void setIntVal(Integer intVal) {
        this.intVal = intVal;
    }

    public Double getDoubleVal() {
        return doubleVal;
    }

    public void setDoubleVal(Double doubleVal) {
        this.doubleVal = doubleVal;
    }

    public String getStrVal() {
        return strVal;
    }

    public void setStrVal(String strVal) {
        this.strVal = strVal;
    }
}
以及一个类(
Handler
),该类需要包含lambda
函数
BiConsumer
,以获取和设置值:

class Handler {
    Function<Filter, Object> getter;
    BiConsumer<Filter, Object> setter;
    public Handler(Function<Filter, Object> getter, BiConsumer<Filter, Object> setter) {
        this.getter = getter;
        this.setter = setter;
    }
}
但是二传手不起作用。编译器抛出一个错误:

error: incompatible types: invalid method reference
Handler handler1 = new Handler(Filter::getIntVal, Filter::setIntVal);
incompatible types: Object cannot be converted to Integer

error: incompatible types: invalid method reference
Handler handler2 = new Handler(Filter::getDoubleVal, Filter::setDoubleVal);
incompatible types: Object cannot be converted to Double

error: incompatible types: invalid method reference
Handler handler3 = new Handler(Filter::getStrVal, Filter::setStrVal);
incompatible types: Object cannot be converted to String
因此,
BiConsumer
不能强制将
对象
强制转换为
字符串
,等等。那么我该如何解决这个问题呢?如何编写此代码,以便使用lambda函数设置
过滤器的值

很确定答案与泛型有关,我有时很难理解它。

泛型你的处理程序

class Handler<E> {
    Function<Filter, E> getter;
    BiConsumer<Filter, E> setter;
    public Handler(Function<Filter, E> getter, BiConsumer<Filter, E> setter) {
        this.getter = getter;
        this.setter = setter;
    }
}
类处理程序{
功能吸气剂;
双消费者设定器;
公共处理程序(函数getter、双消费者setter){
this.getter=getter;
this.setter=setter;
}
}
下面是使用示例

    Handler<Integer> handler1 = new Handler<>(Filter::getIntVal, Filter::setIntVal);
    Integer i1 = handler1.getter.apply(filter);
    handler1.setter.accept(filter, i1);
handler1=新处理程序(Filter::getIntVal,Filter::setIntVal);
整数i1=handler1.getter.apply(过滤器);
handler1.setter.accept(过滤器,i1);
泛化处理程序

class Handler<E> {
    Function<Filter, E> getter;
    BiConsumer<Filter, E> setter;
    public Handler(Function<Filter, E> getter, BiConsumer<Filter, E> setter) {
        this.getter = getter;
        this.setter = setter;
    }
}
类处理程序{
功能吸气剂;
双消费者设定器;
公共处理程序(函数getter、双消费者setter){
this.getter=getter;
this.setter=setter;
}
}
下面是使用示例

    Handler<Integer> handler1 = new Handler<>(Filter::getIntVal, Filter::setIntVal);
    Integer i1 = handler1.getter.apply(filter);
    handler1.setter.accept(filter, i1);
handler1=新处理程序(Filter::getIntVal,Filter::setIntVal);
整数i1=handler1.getter.apply(过滤器);
handler1.setter.accept(过滤器,i1);