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);