线路
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;
}
最佳答案
这似乎是一个奇怪的类型推断案例,显式标记表达式可以解决编译错误:
associations.put("test1", (BiConsumer<B, String>) B::setBeta);
关于java - 包含多态方法引用的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39479645/