我有一节课(
Filter
)有几个变量:
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
Function
和
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;
}
}
(我用过
双吸收器
因此,答案是:
https://stackoverflow.com/a/27759997/963076
)
实现方式如下:
Filter filter = new Filter();
Handler handler1 = new Handler(Filter::getIntVal, Filter::setIntVal);
Object o = handler1.getter.apply(filter);
handler1.setter.accept(filter, o);
Handler handler2 = new Handler(Filter::getDoubleVal, Filter::setDoubleVal);
Handler handler3 = new Handler(Filter::getStrVal, Filter::setStrVal);
但是设定器不起作用。编译器引发错误:
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
所以
双吸收器
无法强制铸造
Object
到
String
,等等。那我该怎么解决这个问题呢?如何编写此命令,以便可以设置
过滤器
有lambda函数吗?
很肯定答案与泛型有关,我有时很难理解泛型。