该行
associations.put("test1",B::setBeta);
下面的无法编译。我不清楚为什么它不起作用,因为B扩展A.是否有办法使这项工作?我正在尝试从继承族中构建方法引用的映射。
import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;
public enum Test {
ENUM0() {
@Override
public void init() {
associations.put("test0",A::setAlpha);
}
},
ENUM1() {
@Override
public void init() {
associations.put("test1",B::setBeta);
}
};
public abstract void init();
Map<String, BiConsumer<? extends A, String>> associations = new HashMap<>();
}
class A {
public String getAlpha() {
return alpha;
}
public void setAlpha(String alpha) {
this.alpha = alpha;
}
String alpha;
}
class B extends A {
public String getBeta() {
return beta;
}
public void setBeta(String beta) {
this.beta = beta;
}
String beta;
}
答案 0 :(得分:1)
这似乎是类型推断的奇怪案例,显式标记表达式可以解决编译错误:
associations.put("test1", (BiConsumer<B, String>) B::setBeta);